LINUX抓狂问题

SKATE11 2013-11-25 05:48:48
部分代码如下:
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:");的输出 太蛋疼了 求解
...全文
131 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
SKATE11 2013-11-25
  • 打赏
  • 举报
回复
感谢各位 按大家说的已经解决
u0116snail 2013-11-25
  • 打赏
  • 举报
回复
fflush(stdout)
cheneydc 2013-11-25
  • 打赏
  • 举报
回复
引用 4 楼 SKATE11 的回复:
引用 1 楼 adlay 的回复:
标准输出有缓冲的, 后面加一句 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]# 不知到楼主是什么编译器
SKATE11 2013-11-25
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
标准输出有缓冲的, 后面加一句 fflush(stdout); 来冲刷一下吧
不行啊 要是我去掉select的那段操作fprintf(stdout, "server:")才能在正常时间输出。 不然会在整段程序执行完才显示出来
cheneydc 2013-11-25
  • 打赏
  • 举报
回复
上面两位说的对,是有缓冲滴,默认是行缓冲,碰到‘\n’或者缓冲区满了才输出 要么如第一位说的用fflush(stdout), 强制输出缓冲区的 或者每次输出后面加'\n',也是可以的
ws_yqr 2013-11-25
  • 打赏
  • 举报
回复
fprintf(stdout, "server:")加个回车看看,标准IO是带缓冲的。
www_adintr_com 2013-11-25
  • 打赏
  • 举报
回复
标准输出有缓冲的, 后面加一句 fflush(stdout); 来冲刷一下吧

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧