让我们考虑一段代码:

char *buffer = (char*) malloc(MAX_LENGTH_OF_COMMAND);
while(1){
    printf("gsh> ");

    read(0, buffer, sizeof(buffer) );

}

行为也很奇怪。我的意思是,下面输入“input,input,input”的输出是“gsh>gsh>gsh>gsh>gsh>”。
所以我希望在I/O过程中会有一个中断(我的意思是从用户那里获取数据),因为等待用户是浪费时间。好吧,我明白了。但是,如果我必须在下一行中使用缓冲区,例如:
char *buffer = (char*) malloc(MAX_LENGTH_OF_COMMAND);
while(1){
    printf("gsh> ");

    read(0, buffer, sizeof(buffer) );
    // do something with buffer.
}

所以有必要有完整的缓冲区(输入)。我不明白这一点,也不知道怎样才能确保完整的输入是可用的。
请解释一下。(纠正我的思路)。
提前谢谢。

最佳答案

您刚刚发现read()不能保证它将读取多少字节。通常必须在循环中调用read(),直到找到定界字符(如换行符)的输入。此外,我们注意到,在上述换行符之后,您将需要保留在读取缓冲区中的任何内容(如果有的话),因为它是下一个需要读取()的对象的有效输入。
请注意,read()的返回是它读取的字节数,并且您的输入不会以空结尾(因为它不需要字符串)。

09-13 09:30