代码之家  ›  专栏  ›  技术社区  ›  Cenoc

从标准输入读取

c++
  •  0
  • Cenoc  · 技术社区  · 15 年前

    提前谢谢!

    1 回复  |  直到 15 年前
        1
  •  0
  •   paxdiablo    15 年前

    read 允许返回的字符数少于您要求的字符数,因此您应该为这种可能性编写代码,而不是试图找到一种避免这种情况的方法。

    例如,如果文件(或管道)中只剩下22个字节,它将为您提供这些字节。

    Linux man page (自 阅读 是一个POSIX的东西,而不是C++的东西:

    如果缓冲区的其余部分似乎被正确填充,我可以向您保证这完全是偶然的,您不应该依赖于此。如果 阅读 返回1,然后只使用这一个字符。如果你遵守规则,人物似乎消失了, 然后 你可以回来抱怨一辆马车 实现(我不需要指出这不太可能)。

    请尝试以下程序:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main (void) {
        char buff[255];
        int i;
    
        while ((i = read (0, buff, 255)) > 0) {
            printf ("%3d: [%*.*s]\n", i, i, i, buff);
        }
    
        return 0;
    }
    

    echo hello there | ./tstprg ; (echo hello ; sleep 1 ; echo there) | ./tstprg
    

    看看你能得到什么。我的输出是:

     12: [hello there
    ]
      6: [hello
    ]
      6: [there
    ]