是否可以使用没有管道的文件流在孩子和父母之间进行通信? C

问题描述 投票:0回答:1

是否可以在不使用管道的情况下从子进程写入文件流并从父进程读取文件流?

我有:

FILE *fp;
char *msg = "TEST MESSAGE";

if (fork() == 0) {
    fp = fopen("temp.txt", "w");
    dup2(fileno(fp), STDOUT_FILENO);
    execlp("echo", "echo", msg, NULL);
}

fp = fopen("temp.txt", "r");
char buf[1000];
fgets(buf, sizeof(buf), fp);
printf("received: %s\n", buf);
fclose(fp);

temp.txt 当我尝试在父进程中读取它时它是空的,但是如果我在运行程序后 cat 它有测试消息。我尝试刷新并搜索 (0) fp,但这不起作用。

c pipe
1个回答
1
投票

原则上这可以工作,但是你有一个竞争条件:你的父进程可能在孩子开始写文件之前读取文件。请记住,它们是并行执行的。

但是例如,如果在尝试读取文件之前您有孩子的父母

waitpid
,您应该会发现它具有正确的内容。

还有许多其他可能的方法来同步两个进程,以便父进程仅在知道子进程完成写入后才读取:文件锁、信号量、信号等。

© www.soinside.com 2019 - 2024. All rights reserved.