超过read()的缓冲区大小

时间:2013-03-29 07:54:19

标签: c unix input

#define MAX_BUFF_SIZE   64
char input[MAX_BUFF_SIZE];

int inSize = read(0, input, MAX_BUFF_SIZE);
if(inSize <= 0 || inSize > MAX_BUFF_SIZE){
     printf("An error occurred in the read.\n");
     exit(-1);
}

我正在编写一个程序,提示用户输入,此输入的最大大小为64个字符。如果用户输入超过64个字符,程序应退出。

我相信我正确使用read()但它永远不会导致任何错误/异常,即使我传入&gt; 64个字符。我在这里做错了什么?

无论如何,我可以查看用户是否输入超过64个带有read()的字符?

1 个答案:

答案 0 :(得分:2)

read()永远不会读取比您允许的数量更多的字节数。如果你告诉它最多读取64个字节,它将读取最多64个字节,即使有更多可用数据。尚未读取的字节可用于进一步读取(我假设inputSTDIN_FILENO,在这种情况下,它们只是留在stdin缓冲区中。)