【发布时间】:2022-01-07 15:48:45
【问题描述】:
在 Linux 上,为什么这会打印 0 并挂起而不是打印 0 到 999?
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
int n = 1000;
int fromparent[2];
int fromchild[2];
int *x = 0;
pipe(fromparent);
pipe(fromchild);
if (fork() == 0) {
/* child */
while (1) {
read(fromparent[0], x, 1);
write(fromchild[1], x, 1);
}
} else {
/* parent */
for (int i = 0; i < n; i++) {
printf("%d\n", i);
write(fromparent[1], x, 1);
read(fromchild[0], x, 1);
}
exit(0);
}
}
【问题讨论】:
-
注意:如果失败,fork() 的返回值可以是-1。你对这个案子处理不当。