【发布时间】:2010-11-14 18:46:50
【问题描述】:
您好,我需要使用系统调用 read() 来读取 I/O。我有以下代码
//Reading in the commands
for(;;) {
n = read( fd, buf, 128 );
fflush(stdin);
printf("---\n");
}
在我终止程序之前它不会打印“---”字符串,然后它会一次打印所有内容。我也尝试过刷新输入流,但没有运气。我对read() 不是很熟悉,所以我不知道它是如何工作的。我需要使用read() 的原因是因为我需要让CTRL-D 终止程序。有人能告诉我为什么会发生这种情况以及如何进行吗?提前致谢。
PS:我又做了一些测试,得到了一个有趣的结果:
for(i;i<3;i++) {
if( read( fd, buf, 128 ) < 0) {
printf("Read returned less than 0");
} else {
printf("Read is working\n");
}
}
删除“\n”字符使其在读取第三个输入后打印“Read is working”3 次。将字符放入其中将在读取每个输入后打印。
【问题讨论】:
-
永远不要在
stdin上调用fflush- 它仅对输出流有效 - 在输入流上使用它会导致 未定义的行为。
标签: c system-calls