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',也是可以的
[解决办法]
#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;
}