用linux中的select函数监测有名管道,如果超时之前返回,那么tv值会发生变化吗?
最近解决一个问题,用linux中的select函数检测有名管道中是否有数据可读,如果没有超时40ms,如果有就立即返回,然后继续做select监测,可是我需要用到tv值,tv值会发生变化吗?
程序代码:int i;
fd_set rfds;
struct timeval tv;
while(1)
{
tv.tv_sec = 0;
tv.tv_usec = 40000;
FD_ZERO(&rfds);
FD_SET(fid, &rfds);
ret = select(fid+1, &rfds, NULL, NULL, &tv);
printf("tv=%d\n",tv.tv_usec);
if (ret > 0 && FD_ISSET(fid, &rfds))
read(fid, &i, sizeof(int));
}另一个线程会往管道里写数据,这里ret立即返回,可是网上说tv的值就是剩余时间,但是加打印看,每次返回ret后tv都是0,老师也说tv的值会变,可是还是有点怀疑,谁能帮我解释一下呢?或者我的程序有什么不对的地方需要改正?求救各位!谢谢啦






