pid = fork();
if (!pid) {
execvp(args[0], args); // 这里会创建一个路径为 path 的文件,并且会写入一些数据。
}
wait(&wstatus);
fd = open(path, O_RDONLY); // 读取子进程创建的文件
while ((n = read(fd, buf, BUFSIZ)) > 0)
if (write(connfd, buf, n) != n)
printf("write error\n");
这段代码先 fork 一个子进程,子进程创建并写入一些数据到一个文件。
父进程通过 wait 等待子进程执行完毕,然后 open 并开始读取子进程写入的文件。
这段代码有一个问题,就是有时子进程明明写入了一些数据到文件,但父进程却读取不到任何数据,就像子进程只是创建了一个空文件一样,如果在 wait 后加一个 sleep(1)就没有这种情况,请问如何保证子进程写入文件完毕后父进程才开始读取?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.