我正在编写一个小型 C 程序,它必须接受大于 4096 字节的输入流。
我确实找到了一个推荐使用的帖子设置vbuf() here:
使 fgets 在 Linux 上发出更长的 read() 调用 https://stackoverflow.com/q/3612363
我仍然很难让它发挥作用——这是我正在努力解决的代码片段:
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
Thanks!
现在你正在使用_IONBF
, 意思是no缓冲。使用_IOFBF
相反可能是一个好的开始(那就是full缓冲)。要增加缓冲区大小,您还需要将大缓冲区大小指定为第四个参数,例如:
setvbuf(stdin, NULL, _IOFBF, 16384);
这会动态分配缓冲区空间。根据情况,您可能希望将缓冲区传递给它:
char mybuffer[32768];
setvbuf(stdin, mybuffer, _IOFBF, sizeof(mybuffer));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)