Linux上read()的奇怪问题。

发布于 2022-09-01 05:53:34 字数 754 浏览 11 评论 0

这段代码只是一个测试用例中得一个代码段,我把它提取出来了。如下:

 #include    <stdio.h>
 #include    <unistd.h>
 #include    <fcntl.h>
 #include    <string.h>
 int main()
  {
     char buffer[1024];
     int nchars;
     while( 1 )
     {
        printf( "input the message:" );
        nchars = read( 0, buffer, 1023 );
        buffer[nchars] = '\0';
        if(( strncmp( buffer, "quit", 4)) == 0)
            break;
        else
            printf( "%s\n", buffer );
     }
      return 0;
 }

按理说,程序进入循环过后,就会首先打印出:"input the message:"
但是,并不是入期望那样,而是这样:
图片描述

开始就提示用户输入信息。
谁能给个解释吗?
thx in advance :D

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

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

发布评论

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

评论(1

爱你不解释 2022-09-08 05:53:34

这个你可以搜下: 行缓冲, 全缓冲, 不缓冲, 通常命令行程序是行缓冲.

行缓冲的意思是说输出内容在程序退出或遇到\n时才真正打印出来.

你的程序显示输出input the message:, 但由于其中没有\n字符, 所以内容实际还在缓冲区没有打印;
当你输入hello后并将其打印时有个\n字符, 所以这时候你才看到input the message:hello.

另外, 比较是否是quit应该是if (strncmp(buffer, "quit", 4) == 0)吧!

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