1. 程式人生 > >Select()系統呼叫及檔案描述符集fd_set的應用

Select()系統呼叫及檔案描述符集fd_set的應用

過去,描述符集被作為一個整數位遮蔽碼得到實現,但是這種實現對於多於32個的檔案描述符將無法工作。描述符集現在通常用整數陣列中的位域表示,陣列元素的每一位對應一個檔案描述符。例如,一個整數佔32位,那麼整數陣列的第一個元素代表檔案描述符0到31,陣列的第二個元素代表檔案描述符32到63,以此類推。巨集FD_SET設定整數陣列中對應於fd檔案描述符的位為1,巨集FD_CLR設定整數陣列中對應於fd檔案描述符的位為0,巨集FD_ZERO設定整數陣列中的所有位都為0。假設執行如下程式後:

相關推薦

Select()系統呼叫檔案描述fd_set應用

過去,描述符集被作為一個整數位遮蔽碼得到實現,但是這種實現對於多於32個的檔案描述符將無法工作。描述符集現在通常用整數陣列中的位域表示,陣列元素的每一位對應一個檔案描述符。例如,一個整數佔32位,那麼整數陣列的第一個元素代表檔案描述符0到31,陣列的第二個元素代表檔案描述符32到63,以此類推。巨集FD_SE

select()系統呼叫檔案描述fd_set

過去,描述符集被作為一個整數位遮蔽碼得到實現,但是這種實現對於多於32個的檔案描述符將無法工作。描述符集現在通常用整數陣列中的位域表示,陣列元素的每一位對應一個檔案描述符。例如,一個整數佔32位,那麼整數陣列的第一個元素代表檔案描述符0到31,陣列的第二個元素代表檔案描述符32到63,以此類推。巨集FD_SE

select函式檔案描述的使用

轉載至:http://blog.csdn.net/zjf82031913/article/details/5617031Select在Socket程式設計中還是比較重要的,可是對於初學Socket的人來說都不太愛用Select寫程式,他們只是習慣寫諸如connect、acce

Linux系統呼叫檔案描述

每個執行的中的程式被稱為程序,他有一些與之關聯的檔案描述符。 檔案描述符就相當於Windows中的File * 指標,標記著檔案資訊,然而我們可以知道檔案描述符為一個非負整數,怎麼用一個非負整數描述一個檔案呢。 在作業系統中,每一個程序都有標記自己的程序控制塊(PCB)。 在PCB中,就

linux的檔案描述fd_set的實現方式

通過賦值語句可以在兩個檔案描述符集之間進行賦值,例如可以這樣寫: fd_set readset,tmpset; FD_ZERO(&readset); FD_ZERO(&tmpset); FD_SET(listener,&tmpset);

Linux高階程式設計基礎——檔案系統程式設計之檔案描述

檔案系統程式設計之檔案描述符——實驗題 /*編寫程式碼,完成以下功能: 1.建立新檔案,該檔案具有使用者讀寫許可權。 2.採用dup/dup2/fcntl複製一個新的檔案描述符,通過新檔案描述符向檔案寫入“class_name”字串; 3.通過原有的檔案描述符讀取檔案中的內容,並且列印顯示;*/

理解Unix/Linux系統中的檔案描述

簡介 檔案描述符是針對Unix/Linux的每個程序而言的,每個程序都維護了一個檔案指標表,指標指向作業系統的檔案。這裡的檔案是指的Unix/Linux系統所說的檔案,Unix/Linux下一切皆檔案。檔案描述符相當於一個檔案指標表的下標,程序通過下標指標進行間接定址,從而在作業系統

小何講Linux: Linux中檔案檔案描述概述

在Linux中,一切皆檔案!所有對裝置和檔案的操作都是使用檔案描述符來進行的。檔案描述符是一個非負的整數,它是一個索引值,並指向在核心中每個程序所開啟的檔案的記錄表;當開啟一個現存檔案或建立一個新檔案

Unix程式設計:檔案I/O操作檔案描述

Unix系統中大多數檔案I/O需要用到以下五個函式:open,read,write,lseek以及close。這些函式通常被稱為不帶緩衝的I/O(這些函式都是在核心中執行,它們直接對核心快取區進行讀寫)。 檔案描述符 對於核心而言,所有開啟的檔案都通過檔案描述符引用,檔案描

Linux:基礎IO(cIO庫函式詳細介紹)(IO系統呼叫介面詳細介紹)(兩者關係:檔案描述檔案指標)

目錄 c系統中的庫函式: fopen:開啟檔案 fclose:關閉檔案 fwrite:向檔案寫入一個數據塊 fread:讀寫 fprintf:格式化輸出到一個流/檔案中 fseek:移動/跳轉 到當前 讀取/寫入位置 fgets:獲取字串 fput:把字串寫入到指

淺談檔案描述檔案系統

之前在講IO操作的時候,其中系統級IO中的open,write,read,close都用到了檔案描述符(file descriptor),其中open的返回值為檔案描述符,write、read和close都是在傳參的時候需要傳檔案的檔案描述符。 那麼,檔案描述

Linux下select函式檔案描述0狀態的問題

當然是在有輸入或者輸出時檔案描述符的讀寫狀態改變咯,比如標準輸入的檔案描述符是0,如果用select來等待0號檔案描述符,那麼當在鍵盤上敲字元時開始,就是檔案描述符的讀寫狀態改變之時,這時select函式就會返回;對於套接字描述符來說也是這樣,用select來等待一個伺服器描

檔案描述——select()函式以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET

舉個例子,比如recv(), 在沒有資料到來呼叫它的時候,你的執行緒將被阻塞,如果資料一直不來,你的執行緒就要阻塞很久.這樣顯然不好。所以採用select來檢視套節字是否可讀(也就是是否有資料讀了) 。 步驟如下——socket s; ..... fd_set set; while(1) { FD_ZERO

linux下的select簡直太奇葩了:1024限定的不只是監聽的個數,還是檔案描述的最大值,注意,是值

轉自:http://m.blog.csdn.net/blog/wuzili1234/12450451 我原來自以為對select就算不熟,基本原理和使用方法也略知一二了,做了一年多的伺服器程式設計,好歹知道linux下的select不支援超過1024個的描述符,好歹知道

shell學習整理(5)-玩轉檔案描述重定向

常見的檔案描述符: 標準輸入stdin, 標準輸出stdout, 標準錯誤stderr 1. 將輸出的文字重定向或者儲存到一個檔案中 $ echo "this is a sample" > temp.txt   通過這條命令會將"this is a sample"寫入

檢視/修改linux系統的最大連結數限制/檔案描述限制/埠範圍限制/虛擬記憶體等

一、修改最大連線數 1、檢視當前檔案描述符的限制數目的命令: ulimit -n 2、修改檔案描述符的限制數目 2.1 臨時改變當前會話: ulimit -n 65536 2.2 永久變更需要下面兩個步驟: 1) 修改/etc/security/limits.c

linux檔案描述系統開啟檔案和i節點的關係

首先區分檔案描述符和開啟的檔案 核心維護了三個資料結構 程序級的檔案描述符表(即每個程序一個) 系統級的開啟檔案表(即該表在整個核心中只有一個) 檔案系統的 i-node 表 針對每個程序,核心為其維護一個開啟的檔案描述

linux系統檔案描述file descriptor與inode的相關知識

每個程序在Linux核心中都有一個task_struct結構體來維護程序相關的 資訊,稱為程序描述符(Process Descriptor),而在作業系統理論中稱為程序控制塊 (PCB,Process Control Block)。task_struct中有一個指標(

linux系統程式設計之基礎必備(三):檔案描述file descriptor與inode的相關知識

       每個程序在Linux核心中都有一個task_struct結構體來維護程序相關的 資訊,稱為程序描述符(Process Descriptor),而在作業系統理論中稱為程序控制塊 (PCB,Process Control Block)。task_struct中有一

fork -- 子程序共享父程序開啟的檔案描述

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #define FILE_PATH "file_point" int main(int a