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