您好我需要使用系统调用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次。在读取每个输入后,使用该字符将使其打印。
答案 0 :(得分:0)
您需要检查'read'的返回值以检测STDIN上的EOF(即按Ctrl-D)。您发布的代码是无限循环。
答案 1 :(得分:0)
我仍然不知道为什么会这样做,但fflush(stdout)
再次循环之前就解决了这个问题。
我的原始代码:
//Reading in the commands
for(;;) {
n = read( fd, buf, 128 );
fflush(stdin);
[Other statements]
fflush(stdout);
}
解决了这个问题。仍然想知道为什么需要这样做。