关于select函数在linux下的问题

51while(1){52//FD_ZERO(&readfds);53//FD_SET(fd,&readfds);54tmout.tv_sec=0;55tmout.tv_... 51 while(1){
52 // FD_ZERO(&readfds);
53 // FD_SET(fd, &readfds);
54 tmout.tv_sec = 0;
55 tmout.tv_usec = 500000;
56 rc = select(1, NULL, NULL, NULL, &tmout);
57 printf("abc\n");//如果有/n就可以执行
58 }
0.5秒打印一次abc
结果
abc
abc
abc

如果程序改下
51 while(1){
52 // FD_ZERO(&readfds);
53 // FD_SET(fd, &readfds);
54 tmout.tv_sec = 0;
55 tmout.tv_usec = 500000;
56 rc = select(1, NULL, NULL, NULL, &tmout);
57 printf("abc");//如果有/n就可以执行
58 }
abc后没有\n就什么都不打印了

为什么啊?
如果是缓冲的话~~有什么办法让他不等到\n就输出呢??
有没有类似flush函数?
展开
 我来答
航延活5534
2007-08-30
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
因为LINUX下的标准输出stdout,是行缓冲的,缓冲区大小8192字节是一个典型值.
必须遇到字符'\n'才真正刷新缓冲区输出到屏幕上,或者输出缓冲区被填满也会输出到屏幕。

我估计,你等足够长的时间,等你的修改后的程序把输出缓冲区填满,会一次性的打印出一大堆abc.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式