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

发布于 2024-10-02 13:53:43 字数 634 浏览 7 评论 0原文

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

Hi I need to use the system call read() to read from I/O. I have the following code

//Reading in the commands
for(;;) {
    n = read( fd, buf, 128 );
    fflush(stdin);
    printf("---\n");
}

It will not print the "---" string until I I terminate the program, then it'll print all at once. I've tried flushing the input stream as well with no luck. I'm not very familiar with read() so I don't exactly know how it works. The reason I need to use read() is because I need to make CTRL-D terminate the program. Would anyone mind enlighten me as to why is this happening and how to proceed? Thanks in advance.

PS: I did some more testing an got an interesting result:

for(i;i<3;i++) {
      if( read( fd, buf, 128 ) < 0) {
        printf("Read returned less than 0");
      } else {
          printf("Read is working\n");
      }
  }

removing the "\n" character makes it print "Read is working" 3 times after the third input is read. having the character in there will make it print after each input is read.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一指流沙 2024-10-09 13:53:43

您需要检查“read”的返回值以检测 STDIN 上的 EOF(即按 Ctrl-D)。您发布的代码是无限循环。

You need to check the return value of ‘read‘ to detect EOF on STDIN (i.e. pressing Ctrl-D). The code you posted is an infinite loop.

酷遇一生 2024-10-09 13:53:43

我仍然不知道为什么要这样做,但是在再次循环之前 fflush(stdout) 解决了问题。

对于我的原始代码:

//Reading in the commands
for(;;) {
    n = read( fd, buf, 128 );
    fflush(stdin);
    [Other statements]
    fflush(stdout);
}

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

I still don't know why it was doing that but fflush(stdout) before it loops again solves the problem.

for my orginal code:

//Reading in the commands
for(;;) {
    n = read( fd, buf, 128 );
    fflush(stdin);
    [Other statements]
    fflush(stdout);
}

solved the problem. Still wondering why this needs to be done.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文