- 論壇徽章:
- 0
|
最近解決一個(gè)問題,用linux中的select函數(shù)檢測(cè)有名管道中是否有數(shù)據(jù)可讀,如果沒有超時(shí)40ms,如果有就立即返回,然后繼續(xù)做select監(jiān)測(cè),可是我需要用到tv值,tv值會(huì)發(fā)生變化嗎?
- 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));
- }
復(fù)制代碼 另一個(gè)線程會(huì)往管道里寫數(shù)據(jù),這里ret立即返回,可是網(wǎng)上說tv的值就是剩余時(shí)間,但是加打印看,每次返回ret后tv都是0,老師也說tv的值會(huì)變,可是還是有點(diǎn)懷疑,誰(shuí)能幫我解釋一下呢?或者我的程序有什么不對(duì)的地方需要改正?求救各位!謝謝啦 |
|