用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的值会变,可是还是有点怀疑,谁能帮我解释一下呢?或者我的程序有什么不对的地方需要改正?求救各位!谢谢啦