读书人

LINUX抓狂有关问题

发布时间: 2013-11-26 22:51:31 作者: rapoo

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)

读书人网 >C语言

热点推荐