如何通过管道()从子进程(exec)与父进程进行通信?

How to communicate from children process(exec) with parent through pipe()?

我有这两个文件,我使用 exec() 从 main.c 调用 exec.c。据我了解 exec.c 应该继承管道,但它说 exec.c 中没有 link 管道。这里有什么问题?

main.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define die(e)                      \
    do                              \
    {                               \
        fprintf(stderr, "%s\n", e); \
        exit(EXIT_FAILURE);         \
    } while (0);

int main(int argc, char *argv[])
{
    int link[2];
    pid_t pid;
    char foo[4096];

    if (pipe(link) == -1)
        die("pipe");

    if ((pid = fork()) == -1)
        die("fork");

    if (pid == 0)
    {

        dup2(link[1], STDOUT_FILENO);
        close(link[0]);
        close(link[1]);
        execvp("./exec", argv);
        die("execl");
    }
    else
    {

        close(link[1]);
        int nbytes = read(link[0], foo, sizeof(foo));
        printf("Output: (%.*s)\n", nbytes, foo);
        wait(NULL);
    }
    return 0;
}

exec.c

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/shm.h>

int main(int argc, char *argv[])
{
    char a;
    a='A';
    write(link[1],&a,sizeof(a));


    return 0;
}

我只是在练习,想输出从 pipe() 保存的数据

我做错了什么,你能帮我调试一下吗? TIA!

main.c 程序中,您通过子进程的标准输出连接管道。

这意味着子进程通过其正常的标准输出将信息传递给父进程。

由此可见,exec.c程序可以像这样简单:

#include <stdio.h>

int main(void)
{
    printf("A");
}

更具体地说,您的 exec.c 源文件不知道管道,绝对不知道变量 link,并且将无法构建。