[爆卦]Select fd_set是什麼?優點缺點精華區懶人包

為什麼這篇Select fd_set鄉民發文收入到精華區:因為在Select fd_set這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者kumusou ()看板C_and_CPP標題[問題] select() system call...


以下程式碼,在linux系統下

使用gcc編譯

編譯後會出現 line 16: storage size of "master_set" isn't known
"working_set"

查了一下該include也include了

為什麼這邊編譯後會出現錯誤呢


#include <stdio.h>
#include <sys/types.h>
#include <sys/unistd.h>
#include <sys/select.h>
#include <sys/time.h>

int main(){
int i;
struct timeval timeout;
struct fd_set master_set, working_set;
char buf[1024];

FD_ZERO(&master_set);
FD_SET(0, &master_set);
timeout.tv_sec = 5;
timeout.tv_usec = 0;
i = 0;

while(1){
memcpy(&working_set, &master_set, sizeof(master_set));
select(1, &working_set, NULL, NULL, &timeout);
if(FD_ISSET(0, &working_set)){
read(0, buf, sizeof(buf));
write(1, buf, strlen(buf));
}
printf("iteration: %d\n", i++);
}

return 0;
}


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.42.101.127
Feis:fd_set master_set; 而不是 struct fd_set master_set; 11/19 23:26
Feis:fd_set 應該已經是型態名稱了 11/19 23:27
kumusou:了解 謝謝喔 11/19 23:44

可以執行了,但是執行時

當我輸入某字串 + ENTER後

他應該會輸出我輸入的字串

而後我沒輸入的話應該是會等5秒

印一次 ITERATION

但是奇怪的是

我輸入完後

他第一次會等5秒

5秒後,就開始瘋狂印ITERATION了

不知哪裡邏輯有誤?

謝謝
※ 編輯: kumusou 來自: 114.42.101.127 (11/19 23:52)
Feis:每次都重設 timeout, select 可能會改 timeout 11/20 00:09
kumusou:太強了 謝謝你 11/20 00:13

你可能也想看看

搜尋相關網站