日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux中对文件描述符的操作(FD_ZERO、FD_SET、FD_CLR、FD_ISSET

發布時間:2023/12/9 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux中对文件描述符的操作(FD_ZERO、FD_SET、FD_CLR、FD_ISSET 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?在Linux中,內核利用文件描述符(File Descriptor)即文件句柄,來訪問文件。文件描述符是非負整數。打開現存文件或新建文件時,內核會返回一個文件描述符。讀寫文件也需要使用文件描述符來指定待讀寫的文件。宏FD_ZERO、FD_SET、FD_CLR、FD_ISSET中“FD”即為file descriptor的縮寫,下面來一一進行介紹。

?????? 首先介紹一個重要的結構體:fd_set,它會作為下面某些函數的參數而多次用到,fd_set可以理解為一個集合,這個集合中存放的是文件描述符(file descriptor),即文件句柄。fd_set集合可以通過下面的宏來進行人為來操作。

1》FD_ZERO

用法:FD_ZERO(fd_set*);

用來清空fd_set集合,即讓fd_set集合不再包含任何文件句柄。

2》FD_SET

用法:FD_SET(int ,fd_set *);

用來將一個給定的文件描述符加入集合之中

3》FD_CLR

用法:FD_CLR(int ,fd_set*);

用來將一個給定的文件描述符從集合中刪除

4》FD_ISSET

用法:FD_ISSET(int ,fd_set*);

檢測fd在fdset集合中的狀態是否變化,當檢測到fd狀態發生變化時返回真,否則,返回假(也可以認為集合中指定的文件描述符是否可以讀寫)。

5》函數select

用法:int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);

作用:用來夠監視我們需要監視的文件描述符(讀或寫的文件集中的文件描述符)的狀態變化情況。并能通過返回的值告知我們。

參數解釋:

int maxfdp:集合中所有文件描述符的范圍,為所有文件描述符的最大值加1。

fd_set *readfds:要進行監視的讀文件集。

fd_set *writefds :要進行監視的寫文件集。

fd_set *errorfds:用于監視異常數據。

struct timeval* timeout:select的超時時間,它可以使select處于三種狀態:

第一,若將NULL以形參傳入,即不傳入時間結構,就是 將select置于阻塞狀態,一定等到監視文件描述符集合中某個文件描述符發生變化為止;

第二,若將時間值設為0秒0毫秒,就變成一個純粹的非阻塞函數, 不管文件描述符是否有變化,都立刻返回繼續執行,文件無變化返回0,有變化返回一個正值;

第三,timeout的值大于0,這就是等待的超時時間,即 select在timeout時間內阻塞,超時時間之內有事件到來就返回了,否則在超時后不管怎樣一定返回。

struct?timeval?timeout;?timeout.tv_sec?=?0;?//秒?timeout.tv_usec?=?dwTimeout?*?1000;?//微秒?1毫秒?=?1000微秒

返回值介紹:

>0:被監視的文件描述符有變化

-1:出錯

0 :超時

總結

以上是生活随笔為你收集整理的Linux中对文件描述符的操作(FD_ZERO、FD_SET、FD_CLR、FD_ISSET的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。