加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读