考虑一段代码:
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缓冲区(输入)。我不明白,我不知道有什么方法可以确保提供完整的输入。
请解释一下。 (并纠正我的思路)。
提前致谢。
答案 0 :(得分:4)
您刚刚发现read()不能保证它将读取多少字节。您通常必须在循环中调用read(),直到找到输入分隔字符(例如换行符)。另外,我们注意到在所述换行符之后,你需要保留读缓冲区中的剩余内容(如果有的话),因为它是下一个需要读取的东西的有效输入()。
请注意,read()返回的是它读取的字节数,并且您的输入不会以空值终止(因为它不期望字符串)。