檔案描述符——select()函式以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
步驟如下——
socket s;
.....
fd_set set;
while(1)
{
FD_ZERO(&set);//將你的套節字集合清空
FD_SET(s, &set);//加入你感興趣的套節字到集合,這裡是一個讀資料的套節字s
select(0,&set,NULL,NULL,NULL);//檢查套節字是否可讀,
//很多情況下就是是否有資料(注意,只是說很多情況)
//這裡select是否出錯沒有寫
if(FD_ISSET(s, &set) //檢查s是否在這個集合裡面,
{ //select將更新這個集合,把其中不可讀的套節字去掉
//只保留符合條件的套節字在這個集合裡面
recv(s,...);
}
//do something here
}
相關推薦
檔案描述符——select()函式以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
舉個例子,比如recv(), 在沒有資料到來呼叫它的時候,你的執行緒將被阻塞,如果資料一直不來,你的執行緒就要阻塞很久.這樣顯然不好。所以採用select來檢視套節字是否可讀(也就是是否有資料讀了) 。 步驟如下——socket s; ..... fd_set set; while(1) { FD_ZERO
select()函式以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
舉個例子,比如recv(), 在沒有資料到來呼叫它的時候,你的執行緒將被阻塞,如果資料一直不來,你的執行緒就要阻塞很久.這樣顯然不好。所以採用select來檢視套節字是否可讀(也就是是否有資料讀了) 。 步驟如下——socket s; ..... fd_set set; while(1) { FD_ZERO
非同步套接字基礎:多路複用、select函式以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
select函式: 系統提供select函式來實現多路複用輸入/輸出模型。原型: #include sys/time.h> #include unistd.h> int select(int maxfd,f
非同步套接字基礎:select函式以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
select函式: 系統提供select函式來實現多路複用輸入/輸出模型。原型: #include sys/time.h> #include unistd.h> select函式:
檔案描述符複製函式dup2()詳解
dup2()是dup()的“升級版“,原型是int dup2(int oldfd, int newfd),作用是讓檔案描述符newfd與oldfd所關聯的檔案(或緩衝區或管道或共享記憶體等)關聯起來,如果一開始newfd已經和某個檔案關聯了(一個描述符同一時刻只能關聯一個檔案
dup和dup2檔案描述符相關函式
#include <unistd.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h>
Linux下select函式檔案描述符0狀態的問題
當然是在有輸入或者輸出時檔案描述符的讀寫狀態改變咯,比如標準輸入的檔案描述符是0,如果用select來等待0號檔案描述符,那麼當在鍵盤上敲字元時開始,就是檔案描述符的讀寫狀態改變之時,這時select函式就會返回;對於套接字描述符來說也是這樣,用select來等待一個伺服器描
Linux的開啟檔案表:開啟檔案表、檔案描述符、開啟的檔案控制代碼以及i-node之間的關係
在Linux系統中一切皆可以看成是檔案,檔案又可分為:普通檔案、目錄檔案、連結檔案和裝置檔案。檔案描述符(file descriptor)是核心為了高效管理已被開啟的檔案所建立的索引,其是一個非負整數(通常是小整數),用於指代被開啟的檔案,所有執行I/O操作的系統呼叫都通過檔案描述符。程式剛剛啟動的
select函式及檔案描述符集的使用
轉載至:http://blog.csdn.net/zjf82031913/article/details/5617031Select在Socket程式設計中還是比較重要的,可是對於初學Socket的人來說都不太愛用Select寫程式,他們只是習慣寫諸如connect、acce
Linux:基礎IO(cIO庫函式詳細介紹)(IO系統呼叫介面詳細介紹)(兩者關係:檔案描述符和檔案指標)
目錄 c系統中的庫函式: fopen:開啟檔案 fclose:關閉檔案 fwrite:向檔案寫入一個數據塊 fread:讀寫 fprintf:格式化輸出到一個流/檔案中 fseek:移動/跳轉 到當前 讀取/寫入位置 fgets:獲取字串 fput:把字串寫入到指
Unix環境程式設計之二:檔案描述符、開啟檔案表、v節點關係詳解
一、檔案描述符概念 Linux 系統中,把一切都看做是檔案,當程序開啟現有檔案或建立新檔案時,核心向程序返回一個檔案描述符,檔案描述符就是核心為了高效管理已被開啟的檔案所建立的索引,用來指向被開啟的檔案,所有執行I/O操作的系統呼叫都會通過檔案描述符。 二、檔案
3.1Apue檔案IO——檔案描述符以及read/write/open/close的使用
檔案描述符 檔案描述符是一個非負的整數。 當開啟一個現有檔案或建立一個新的檔案時,核心向程序返回一個檔案描述符。 當使用open返回的檔案描述符標識該檔案,將其作為引數傳遞給read或write read、write、open的基本使用示例 示例1:從標準輸入讀,向
檔案描述符、檔案表項、V節點表項的一些總結
看書的時候對這三樣東西把握得不太清楚,嗯,所以寫篇blog來總結一下。 檔案描述符(程序級別): 1)、在每個程序表中都有一個記錄項,記錄項中包含有一張開啟檔案描述符表,可將其視察為一個向量(陣列),每個描述符佔用一項。與每個檔案描述符相
linux下的select簡直太奇葩了:1024限定的不只是監聽的個數,還是檔案描述符的最大值,注意,是值
轉自:http://m.blog.csdn.net/blog/wuzili1234/12450451 我原來自以為對select就算不熟,基本原理和使用方法也略知一二了,做了一年多的伺服器程式設計,好歹知道linux下的select不支援超過1024個的描述符,好歹知道
Select()系統呼叫及檔案描述符集fd_set的應用
過去,描述符集被作為一個整數位遮蔽碼得到實現,但是這種實現對於多於32個的檔案描述符將無法工作。描述符集現在通常用整數陣列中的位域表示,陣列元素的每一位對應一個檔案描述符。例如,一個整數佔32位,那麼整數陣列的第一個元素代表檔案描述符0到31,陣列的第二個元素代表檔案描述符32到63,以此類推。巨集FD_SE
第4章 處理使用者輸入與顯示資料------------(標準檔案描述符、STDIN/STDERR/STDOUT、臨時重定向、永久重定向exec)
4.4 顯示資料 4.4.1 標準檔案描述符 Linux系統將每個物件當作檔案處理。這包括輸入和輸出過程。Linux使用檔案描述符(file descriptor)標識每個檔案物件。檔案描述符是一個非負整數,可以唯一地標識會話中開啟的檔案。每個進行最多可以
select()系統呼叫和檔案描述符集fd_set 轉
過去,描述符集被作為一個整數位遮蔽碼得到實現,但是這種實現對於多於32個的檔案描述符將無法工作。描述符集現在通常用整數陣列中的位域表示,陣列元素的每一位對應一個檔案描述符。例如,一個整數佔32位,那麼整數陣列的第一個元素代表檔案描述符0到31,陣列的第二個元素代表檔案描述符32到63,以此類推。巨集FD_SE
Linux 檔案描述符(file descriptor, fd)以及檔案描述符操作dup(), dup2()
1.概述 在Linux系統中,一切皆可以看做是“檔案”,這裡“檔案”包括普通檔案、目錄檔案、連結檔案和裝置檔案等。而檔案描述符(file descriptor, 簡稱fd)是Linux核心所建立的索引,其目的為了高效管理已被開啟的“檔案”。其實,檔案描述符就是一個非負整數(
c++/c socket應用的區別:socket()函式返回檔案描述符fd總是0的問題
最近在arm linux系統上面使用socket建立客戶端到伺服器的連線, 客戶端需要開2個socket連線2個不同的伺服器, 這兩個申請socket的過程都放在同一個類的成員函式中實現, 測試發現,每次拿到的socket的fd均為0。 這個id為0,雖然用起來沒有問題,但
linux c通過檔案描述符以及write和read方法對檔案進行讀寫
1、write和read方法講解 #include<unistd.h> ssize_t read(int fd, void *buf,size_t count); fd為檔案描述符,buf