我有一个像这样的代码片段(测试代码,所以不要太在意这个样式):
int main() {
int fd[2];
pipe(fd);
int id = fork();
if (id > 0) {
char *line = "apple";
close(fd[0]);
for (;;) {
int written;
if (written = write(fd[1], line, 7) == -1) {
break;
}
printf("written %d\n", written);
sleep(1);
}
close(fd[1]);
}
else {
char line[10];
close(fd[1]);
int raed;
while (raed = read(fd[0], line, 10) > 0) {
printf(line);
}
printf("read %d\n", raed);
close(fd[0]);
}
return 0;
}
它保持打印"写0"。但是,如果我注释掉sleep(1)
,它仍然会打印"写0"但是会有" apple"打印。我不知道发生了什么。为什么我不能保留sleep(1)
并让它每1秒打印一次?为什么写0而不是6?
答案 0 :(得分:0)
if (written = write(fd[1], line, 7) == -1)
使用if ((written = write(fd[1], line, 7)) == -1)
大多数时候,程序员经常忘记这一点......