c – 将setvbuf()与STDIN流一起使用
发布时间:2020-12-16 09:34:30 所属栏目:百科 来源:网络整理
导读:我正在写一个小C程序,必须接受大于4096字节的输入流. 我确实找到了一个建议在这里使用setvbuf()的帖子: Making fgets issue longer read() calls on linux 我仍然很难让这个工作 – 这是我正在努力的代码: int main(void) { #define MAX_STRING_SIZE 7168c
我正在写一个小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 ); } 有没有人成功增加这个输入缓冲区? 我的环境:Ubuntu 10.10带有build-essential包 谢谢! 解决方法
现在你正在使用_IONBF,这意味着没有缓冲.使用_IOFBF可能是一个好的开始(这是完全缓冲).要增加缓冲区大小,您还需要将大缓冲区大小指定为第四个参数,例如:
setvbuf(stdin,_IOFBF,16384); 这会动态分配缓冲区空间.根据具体情况,您可能希望将缓冲区传递给它: char mybuffer[32768]; setvbuf(stdin,mybuffer,sizeof(mybuffer)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |