C 在没有管道、dup和fifo的情况下与子进程通信

C 在没有管道、dup和fifo的情况下与子进程通信,c,multiprocessing,fork,C,Multiprocessing,Fork,这个项目正在进行,每个孩子都可以像祖父一样当父亲。我想用一个文本文件与他们交流。他们将读取数字,每次与前一个数字相加,然后写回文件。我首先以读写模式使用open()在文本文件上写入0。之后,在函数调用中 int sum = 0; lseek(fd, 0, 0); read(fd, &sum, sizeof(sum)); sum = sum + count; write(fd, &sum, sizeof(sum)); 所有子项都进入函数,但结果总是得到0。我已经打印了count值

这个项目正在进行,每个孩子都可以像祖父一样当父亲。我想用一个文本文件与他们交流。他们将读取数字,每次与前一个数字相加,然后写回文件。我首先以读写模式使用
open()
在文本文件上写入
0
。之后,在函数调用中

int sum = 0;
lseek(fd, 0, 0);
read(fd, &sum, sizeof(sum));
sum = sum + count;
write(fd, &sum, sizeof(sum));

所有子项都进入函数,但结果总是得到
0
。我已经打印了
count
值,请正确获取。我还尝试锁定以同步(
fcntl()
)它们,但没有成功。

因为您使用了
fork()
。它不会阻止父级,并且子级和父级并行运行。可能在进程修改文件之前,所有其他线程都已经读取了该文件。这个调度是由内核完成的,您不能更改它。如果希望在子文件修改之前暂停父文件,可以使用
vfork()
;在经典版本中,您只能执行或退出。您确实需要显示MCVE()。很可能是@SurajS发现的同步问题。除了管道之外,还有许多IPC机制可以使用。我们不知道您知道哪些是,哪些是合适的建议。我知道套接字、共享内存、命名管道、管道、消息队列。但我不想在这个层次上使用它们。渐渐地,我想应用它们。想想一个目录,其中包含文本文件,可能是另一个目录中的目录,我计算单词数,并将总数加起来。但是,每个文件都属于一个子文件。除了总结部分,一切都好。正如我所说的,每个孩子都会把这个片段带到自己的电脑里。因为我检查了pids,所以它按预期进行了分叉。问题在于如何管理它们。我只是把这个片段用在求和部分@Jonathanleffler顺便说一下,我可以为每个孩子打开文件,用他们的PID保存计数的数字,然后从家长那里读取文件和求和值,但这对我来说似乎很长。我在想没有IPC的简单方法@乔纳坦利弗勒