我目前正在學習操作系統,我遇到了一個問題,我不能完全弄明白。系統調用SELECT和TESTMASK
我有這一塊的僞代碼:
for(;;) {
mask = teskmask;
select(MAXSOCKS,&mask,0,0);
if(FD_ISSET(strmfd,&mask)) {
clilen=sizeof(cliaddr);
newfd=accept(strmfd,(struct sockaddr*)&cliaddr,&clilen);
echo(newfd);
close(newfd);
}
if (FD_ISSET(dgrmfd,&mask)) echo (dgrmfd);
}
注:考慮MAXSOCKS
被定義爲任何(此處無關緊要),strmfd
是流式套接字,dgrmfd
作爲一個數據報套接字, clilen
是客戶端地址的大小, echo(newfd);只是一個函數來回應套接字中的內容。
所以我的問題是:
是什麼/什麼爲testmask
和麪具,它是如何在這裏使用?
我知道select會阻塞進程,直到有些套接字可用於讀/寫或異常。
對,明白了。但是爲什麼我們必須在每個循環中做mask = teskmask? – luispcosta
因爲如果選擇成功,它將重寫所有掩碼。這與poll()分開了'events'和'revents'的另一個區別。 – Netch
那麼在select調用之前可能會有一個testmask的例子呢?通話後面具上會寫些什麼? – luispcosta