linux中有fd set函数吗,LINUX下FD_SET介绍
剛剛了解了linux下select系統調用,函數原型是
#include
#include
int
select(int maxfdpl, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout);
如何給readset, writeset, exceptset這3個參數中的每一個參數指定一個或多個描述符是一個設計上的問題。select使用描述符集,通常是一個整數數組,其中每一個整數中的每一位對應一個描述符。舉例來說,假設使用32位整數,那么該數組的第一個元素對應于描述符0-31,第二個元素對應于32-63,依此類推。隱藏在名為fd_set的數據類型和以下四個宏:
void FD_ZERO(fd_set *fdset);
void FD_SET(int fd, fd_set *fdset);
void FD_CLR(int fd, fd_set *fdset);
int FD_ISSET(int fd, fd_set *fdset);
宏FD_SET設置文件描述符集fdset中對應于文件描述符fd的位(設置為1),宏FD_CLR清除文件描述符集fdset中對應于文件描述符fd的位(設置為0),宏FD_ZERO清除文件描述符集fdset中的所有位(即把所有位都設置為0)。使用這3個宏在調用select前設置描述符屏蔽位。因為這3個描述符集參數是值-結果參數,在調用select后,結果指示哪些描述符已就緒。使用FD_ISSET來檢測文件描述符集fdset中對應于文件描述符fd的位是否被設置。描述符集內任何與未就緒描述符對應的位返回時均清成0,為此,每次重新調用select函數時,必須再次把所有描述符集內所關心的位置1.
通常,操作系統通過宏FD_SETSIZE來聲明在一個進程中select所能操作的文件描述符的最大數目。許多系統實現有類似下面的聲明,取自4.4BSD的:
#ifndef FD_SETSIZE
#define FD_SETSIZE 256
#endif
不過,更新的源自BSD的內核和源自SVR4的內核把它放在頭文件中。
在linux下頭文件中,是這樣描述的:
/* Maximum number of file descriptors in `fd_set`. */
#define FD_SETSIZE _FD_SETSIZE
_FD_SETSIZE定義在/usr/include/linux下的posix_types.h中:
/*
*This macro may hava been defined in . But we always use the one here.
*/
#undef _FD_SETSIZE
#define _FD_SETSIZE 1024
我們可以把FD_SETSIZE定義為某個更大的值以增加select所用描述符集的大小。不幸的是,這樣做通常行不通。因為select是在內核中實現的,并把內核的FD_SETSIZE定義為上限使用。因此,增大FD_SETSIZE還要重新編譯內核。值得注意的是,有些應用程序開始使用poll代替select,這樣可以避開描述符有限問題。另為,select的典型實現在描述符數增大時可能存在擴展性問題。
有些廠家正在將select的實現修改為允許進程將FD_SETSIZE定義為比默認值更大的某個值,例如BSD/OS。然而,從程序的可移植性考慮,不建議這樣使用。
.Neter玩轉Linux系列之四:Linux下shell介紹以及TCP、IP基礎
基礎篇 .Neter玩轉Linux系列之一:初識Linux .Neter玩轉Linux系列之二:Linux下的文件目錄及文件目錄的權限 .Neter玩轉Linux系列之三:Linux下的分區講解 .N ...
Linux下tmpfs介紹及使用
tmpfs介紹 tmpfs是一種虛擬內存文件系統,而不是塊設備.是基于內存的文件系統,創建時不需要使用mkfs等初始化它最大的特點就是它的存儲空間在VM(virtual memory),VM是由lin ...
06 Linux下Shell介紹
一.概述 每個人在成功登陸Linux后,系統會出現不同的提示符號,例如$,~,#等,然后你就可以開始輸入需要的命令.若命令正確,系統就會依據命令的要求來執行,直到注銷系統為止,在登陸到注銷期間,輸入的 ...
轉://Linux下tmpfs介紹及使用
tmpfs介紹 tmpfs是一種虛擬內存文件系統,而不是塊設備.是基于內存的文件系統,創建時不需要使用mkfs等初始化它最大的特點就是它的存儲空間在VM(virtual memory),VM是由lin ...
linux下定時器介紹1
POSIX Timer 間隔定時器 setitimer 有一些重要的缺點,POSIX Timer 對 setitimer 進行了增強,克服了 setitimer 的諸多問題: 首先,一個進程同一時刻只 ...
linux下定時器介紹2--timer_create等函數集的使用示例
程序1:采用新線程派駐的通知方式 程序2:通知方式為信號的處理方式 #include #include #include
Linux下iptables介紹
ptables簡介 iptables是基于內核的防火墻,功能非常強大,iptables內置了filter,nat和mangle三張表. filter負責過濾數據包,包括的規則鏈有,input,outp ...
LINUX下多路徑的介紹和安裝配置(測試未寫完)
一.什么是多路徑 普通的電腦主機都是一個硬盤掛接到一個總線上,這里是一對一的關系.而到了有光纖組成的SAN環境,或者由iSCSI組成的IPSAN環境,由于主機和存儲通過了光纖交換機或者多塊網卡及IP來 ...
Linux下multipath多路徑配置
一.什么是多路徑 普通的電腦主機都是一個硬盤掛接到一個總線上,這里是一對一的關系.而到了有光纖組成的SAN環境,或者由iSCSI組成的IPSAN環境,由于主機和存 儲通過了光纖交換機或者多塊網卡及IP ...
隨機推薦
在C#代碼中應用Log4Net系列教程(附源代碼)
Log4Net應該可以說是DotNet中最流行的開源日志組件了.以前需要苦逼寫的日志類,在Log4Net中簡單地配置一下就搞定了.沒用過Log4Net,真心不知道原來日志組件也可以做得這么靈活,當然這 ...
Best way to add Gradle support to IntelliJ Project
1, Touch?build.gradle?in root project folder, and use plugins: apply plugin: 'idea' apply plugin: 'j ...
【MongoDB】C#中的Mongo數據類型轉換
用過Mongo的人都知道,Mongo使用的是Bson類型,有string,int,date,bool等數據類型,具體就不詳述了. 在使用Mongo 的C#官方驅動時會碰到一個問題,如何將Bson中的數 ...
CSS第四天總結 更多的屬性 圓角 邊框圖片 段落屬性 顏色漸變 盒子陰影
圓角邊框: border-radius ? ?一個值時表示四個角用的圓半徑,4個值時分別是左上角.右上角.左下角.右下角,單位可以是px和百分比,百分比是半徑相對于邊框長度的比例 在CSS3中我們終于 ...
OC語言-07-OC語言-Foundation框架
結構體 NSRange/CGRange 用來表示一個元素在另一個元素中的范圍,NSRange等價于CGRange 包含兩個屬性: NSUInteger location:表示一個元素在另一個元素中的位 ...
CentOS6.5下netcat工具安裝教程
1.下載下載地址:http://sourceforge.net/projects/netcat/files/netcat/0.7.1/下載的是netcat-0.7.1.tar.gz版本 2.拷貝用U盤 ...
Python內置函數(17)——chr
英文文檔: chr(i) Return the string representing a character whose Unicode code point is the integer?i. F ...
2018-2019-1 20189201 《LInux內核原理與分析》補漏_1125寫
我的愿望是 好好學習Linux 一.題目與解釋 1 test.txt 中的內容是: No Name Mark Percent 01 tom 69 91 02 jack 71 87 03 alex 68 ...
Spring Boot + Spring Cloud 實現權限管理系統 后端篇(十六):容器部署項目
容器部署項目 這一章我們引入docker,采用docker容器的方式部署我們的項目. 首先需要有一個linux環境,并且安裝 java 和 maven 以及 docker 環境,這個教程多如牛毛,不再 ...
Hadoop技術內幕1——源代碼環境準備
Hadoop核心 1.HDFS:高容錯性.高伸縮性……,允許用戶將Hadoop部署在廉價的硬件上,構建分布式系統 2.MapReduce:分布式計算框架,允許用戶在不了解分布式系統底層細節的情況下,開 ...
總結
以上是生活随笔為你收集整理的linux中有fd set函数吗,LINUX下FD_SET介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4变形物体_Houdini基础(二)曲线
- 下一篇: web api、获取DOM元素的方式、事