exec 运行另一个文件时出现语法错误(语言 C)(编辑)

Syntax error from running another file by exec (language C)(edit)

提问人:Dacqu91 提问时间:6/8/2022 最后编辑:Dacqu91 更新时间:6/8/2022 访问量:89

问:

我正在尝试家庭执行官。

第一个代码是:

int main(int argc, char *argv[]){
    // Program changes permission because exec can't execute the file if permission is not accurated
    chmod("src2/child.c", S_IRWXU | S_IRWXU);

    // Now program creates one child process
    pid_t pid = fork();

    // If fork failed exit with error
    if (pid == -1)
    {
        perror("error in fork");
        exit(1);
    }
    if (pid == 0)
    {
        execlp("src2/child.c", "child.c", "Ciao");
        // if execlp return something is error
        perror("error in exec");
        exit(1);
    }
    // father exit
    exit(0);
}

文件 child.c 为:

int child(int argc, char *argv[])
{
    // write the term passed
    printf("%s\n", argv[1]);
    exit(0);
}

makefile 编译了这两个文件。但是在运行时,终端返回'src2/child.c: 6: 语法错误: “(” unexpected' 我不明白为什么

c 语法错误 执行

评论

1赞 stark 6/8/2022
您正在尝试运行 C 源代码,而不是编译后的程序。
0赞 Eugene Sh. 6/8/2022
你是如何在不了解基础知识的情况下进行多进程编程的?“Hello world”程序也不会以这种方式运行。

答:

1赞 ikegami 6/8/2022 #1

由于不是二进制文件,也没有 shebang () 行,因此 shell 希望文件包含要执行的 shell 命令。但事实并非如此。src2/child.c#!

您需要执行(可执行文件),而不是(用于创建该可执行文件的源代码的一部分)。trygamesrc2/child.c


您之前已经表明,有问题的 C 文件是包含文件的项目的一部分。此文件指示执行以下操作:makemakemake

gcc -Wall -std=c99 -I./inc -c src/main.c      -o src/main.o
gcc -Wall -std=c99 -I./inc -c src/errExit.c   -o src/errExit.o
gcc -Wall -std=c99 -I./inc -c src/semaphore.c -o src/semaphore.o
gcc -Wall -std=c99 -I./inc -c src/child.c     -o src/child.o

gcc src/main.o src/errExit.o src/semaphore.o src/child.o -o trygame

这将编译在中找到的四个文件,并将它们链接到一个名为 .src/trygame

您显然重命名为,并且需要相应地调整文件。完成后,运行以生成可执行文件。srcsrc2makemaketrygame

要运行该程序,您需要执行此命令,而不是 .trygamesrc2/child.c

评论

0赞 Dacqu91 6/8/2022
谢谢,我现在下定决心了。只是:我正确地调整了文件。问题实际上是(正如您所说)我不能在 c 文件上使用 exec。我误解了高管家族。