read(C函数)表现得很奇怪

时间:2015-09-18 21:30:12

标签: c

考虑一段代码:

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

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

}

行为很奇怪。我的意思是,输入“输入,输入,输入”的输出是“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.
}

因此有必要使用COMPLETE缓冲区(输入)。我不明白,我不知道有什么方法可以确保提供完整的输入。

请解释一下。 (并纠正我的思路)。

提前致谢。

1 个答案:

答案 0 :(得分:4)

您刚刚发现read()不能保证它将读取多少字节。您通常必须在循环中调用read(),直到找到输入分隔字符(例如换行符)。另外,我们注意到在所述换行符之后,你需要保留读缓冲区中的剩余内容(如果有的话),因为它是下一个需要读取的东西的有效输入()。

请注意,read()返回的是它读取的字节数,并且您的输入不会以空值终止(因为它不期望字符串)。