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

gjmwrych  于 2023-05-16  发布在  其他
关注(0)|答案(1)|浏览(137)

是否可以不使用管道从子节点写入文件流并从父节点读取它?
我有:

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时,它是空的,但如果我在运行程序后将其删除,它会显示测试消息。我尝试刷新并查找(0)fp,但不起作用。

wwodge7n

wwodge7n1#

这在原则上是可行的,但是你有一个race condition:有可能父进程在子进程开始写文件之前就读取了它。请记住,它们是并行执行的。
但是,例如,如果在尝试读取文件之前,您有子文件的父文件waitpid,您应该会发现它具有正确的内容。
还有许多其他可能的方法来同步这两个进程,以便父进程只在知道子进程已经完成写入之后才读取:文件锁、信号灯、信号等等。

相关问题