首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

LINUX抓狂有关问题

2013-11-26 
LINUX抓狂问题部分代码如下:fprintf(stdout, server:)struct timeval tvfd_set readfds/* 设置等待时

LINUX抓狂问题
部分代码如下:
                fprintf(stdout, "server:");
struct timeval tv;
fd_set readfds;
/* 设置等待时间为10秒零500,000 微秒 */
tv.tv_sec = 10;
tv.tv_usec = 500000;
FD_ZERO(&readfds);
FD_SET(0, &readfds);

select(0+1, &readfds, NULL, NULL, &tv);
/* 测试STDIN 是否在readfds 集合中 */
if (FD_ISSET(0, &readfds))
{
/* 在,则在标准输入有输入 */
gets(sendbuf);

}
else
{
/* 不在,则在标准输入没有任何输入 */
printf("Timed out.\n");
break;
}
问题:为什么  fprintf(stdout, "server:");这条语句在select函数执行成功之后才执行  本该先执行的 也就是说我贴的整段代码执行完才看到   fprintf(stdout, "server:");的输出  太蛋疼了  求解 LINUX
[解决办法]
标准输出有缓冲的, 后面加一句 fflush(stdout); 来冲刷一下吧
[解决办法]
fprintf(stdout, "server:")加个回车看看,标准IO是带缓冲的。
[解决办法]
上面两位说的对,是有缓冲滴,默认是行缓冲,碰到‘\n’或者缓冲区满了才输出
要么如第一位说的用fflush(stdout), 强制输出缓冲区的
或者每次输出后面加'\n',也是可以的
[解决办法]

引用:
Quote: 引用:

标准输出有缓冲的, 后面加一句 fflush(stdout); 来冲刷一下吧
不行啊  要是我去掉select的那段操作fprintf(stdout, "server:")才能在正常时间输出。 不然会在整段程序执行完才显示出来



#include <sys/select.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>

int
main(){
char sendbuf[1024];
struct timeval tv;
fd_set readfds;
tv.tv_sec=10;
tv.tv_usec=500000;
FD_ZERO(&readfds);
FD_SET(0, &readfds);

fprintf(stdout, "server:");
//fflush(stdout);

select(0+1, &readfds, NULL, NULL, &tv);
if(FD_ISSET(0, &readfds)){
gets(sendbuf);
}
else
{
printf("Time out .\n");
}

return 0;
}



gcc试了下
加上fflush(stdout);  应该是没问题的
# ./a.out 
server:Time out .

不加的话就会后输出,符合上面说的
# ./a.out 
test
server:[root@dc-work workspace]# 

不知到楼主是什么编译器
[解决办法]
 fflush(stdout)

热点排行