5 6 高階IO 非阻塞 io多路轉接

2021-10-06 18:08:10 字數 739 閱讀 3149

int

fcntl

(int fd,

int cmd,

long arg)

;fcntl

(檔案描述符,cmd,arg):獲取或設定檔案一些命令

cmd:

f_getfl:獲取檔案開啟時的flag,通過返回值得到,忽略arg引數

f_setfl:設定檔案的flag,通過arg進行設定

select

(最大的檔案描述符+

1,讀集,寫集,異常集,超時結構體):監視一堆檔案描述符是否發生了可讀,可寫或異常

成功返回發生了指定事件的檔案描述符,失敗返回-

1,並設定errno的值

返回0則代表超時

fd_clr

(fd,集合位址):將檔案描述符從指定的集合中刪除

fd_isset

(fd,集合位址):判斷檔案描述符是否在指定的集合中,是則返回乙個非0值,不是則返回0值

fd_set

(fd,集合位址):將檔案描述符加入到指定的集合中

fd_zero

超時結構體:

struct timeval

; 使用select可以實現安全的微妙級別的睡眠:

select(0

,null

,null

,null

,超時結構體)

; 等待函式超時則睡眠結束

IO多路轉接 epoll高階

例項三 基於網路c s非阻塞模型的epoll et觸發模式 epoll事件有兩種模型 et模式即edge triggered工作模式。如果我們在第1步將rfd新增到epoll描述符的時候使用了epollet標誌,那麼在第5步調用epoll wait之後將有可能會掛起,因為剩餘的資料還存在於檔案的輸入...

I O多路轉接

對於多個非阻塞i o,怎麼知道i o何時已經處於可讀或可寫狀態?如果採用迴圈一直呼叫write read,直到返回成功,這樣的方式成為輪詢 polling 大多數時間i o沒有處於就緒狀態,因此這樣的輪詢十分浪費cpu。一種比較好的技術是使用i o多路轉接,也叫做i o多路復用。其基本思想為 先構造...

I O多路轉接

include include include include include include include include include include include 巨集定義埠號 define portnumber 8000 define max line 80 int main void...