【发布时间】:2011-08-18 02:18:30
【问题描述】:
我正在编写一个小型 C 程序,它必须接受大于 4096 字节的输入流。
我确实在这里找到了推荐使用 setvbuf() 的帖子:
Making fgets issue longer read() calls on linux
我仍然很难让它工作 - 这是我正在努力解决的部分代码:
int main(void)
{
#define MAX_STRING_SIZE 7168
char input_string[MAX_STRING_SIZE];
printf( "Input: " );
setvbuf( stdin, NULL, _IONBF, 0 );
fgets( input_string, MAX_STRING_SIZE-1, stdin );
printf( "\n" );
printf( "%s", input_string );
}
有没有人成功增加这个输入缓冲区?
我的环境:带有 build-essential 软件包的 Ubuntu 10.10
谢谢!
【问题讨论】:
-
如果你使用
fread()而不是fgets()会怎样。 -
我刚试过 fread() 但它似乎有同样的问题。当提示输入时,我只能将 4096 字节粘贴到终端窗口中。
-
那么应用程序要求将数据“粘贴”到终端中?如果使用文件重定向
<操作,fread()甚至fgets()应该没问题。当然,您可以逐个字符地读取数据。它应该可以正常工作。