调试read()系统调用 - 在按下CTRL-C之前不会继续执行

时间:2010-11-14 18:46:50

标签: c system-calls

您好我需要使用系统调用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次。在读取每个输入后,使用该字符将使其打印。

2 个答案:

答案 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);
}

解决了这个问题。仍然想知道为什么需要这样做。