用於建立檔案描述符的函式,包括pipe、dup/dup2函式。
用於讀寫資料的函式,包括readv/writev、sendfile、mmap/munmap、splice和tee函式。
用於控制i/o行為和屬性的函式,包括fcntl函式。
一、用於建立檔案描述符的函式
#include int pipe(int fd[2]);
函式功能:
建立乙個管道以實現程序間通訊.
函式引數:
fd:fd[0]只能用於從管道讀出資料,fd[1]則只用於往管道中寫資料,不能反著用.
返回值:
成功時返回0,失敗則返回-1並設定errno.
#include #include int socketpair(int domain, int type, int protocol, int fd[2]);
函式功能:
建立雙向管道.
函式引數:
domain:協議族
type:
protocol:傳輸服務型別
fd:fd[0]/fd[1]既可讀也可寫
#include int dup(int file_descriptor);
函式功能:
重定向檔案
函式引數:
file_descriptor:被重定向的檔案描述符
返回值:
返回新的檔案描述符,總是取系統當前可用的最小整數值
int dup2(int file_descriptor_ont, int file_descriptor_two);
函式功能:
重定向檔案
函式引數:
file_descriptor1:被重定向的檔案描述符
file_descriptor2:檔案描述符的下限
返回值:
返回新的檔案描述符,總是取系統當前不小於file_descriptor_two可用的最小整數值
二、用於讀寫資料的函式
#include ssize_t read_v(int fd, const struct iovec *vector, int count);
ssize_t write_v(int fd, const struct iovec *vector, int count);
readv函式將資料從檔案描述符讀到分散的記憶體塊中,即分散讀;
writev函式則將多塊分散的記憶體資料一併寫入檔案描述符中,即集中寫。
#include ssize_t sendfile(int out_fd, int in_fd, off_t* offset, size_t count);
函式功能:
在兩個檔案描述符之間直接傳遞資料(完全在核心中操作),避免了核心緩衝區和使用者緩衝區之間的資料拷貝,效率很高,這被稱為零拷貝。
函式引數:
out_fd:待寫入內容的檔案描述符
in_fd :待讀出內容的檔案描述符
offset:指定從讀入檔案流的哪個位置開始讀
count :傳輸的位元組數
返回值:
sendfile成功時返回傳輸的位元組數,失敗則返回-1並設定errno.
注:in_fd必須指向真實的檔案,out_fd必須是乙個socket檔案描述符。sendfile是乙個專門為網路上傳輸檔案而設計的系統呼叫。
#include void* mmap(void *start, size_t length, int prot, int flags, int fd);
函式功能:
申請一段記憶體空間,可作為程序間通訊的共享記憶體。
函式引數:
start:起始位址,若設定為null,則系統自動分配乙個位址。
length:指定記憶體段的長度
prot:記憶體段的訪問許可權,可讀、可寫、可執行或不能被訪問
flags:控制記憶體段內容被修改後程式的行為
fd:被對映檔案對應的檔案描述符
返回值:
mmap函式成功時返回指向目標記憶體區域的指標,失敗則返回map_failed並設定errno.
int munmap(void *start, size_t length);
函式功能:
用於釋放由mmap建立的這段記憶體空間。
#include ssize_t tee(int fd_in, int fd_out, size_t len, unsigned int flags);
函式功能:
在兩個管道檔案描述符之間複製資料,也是零拷貝操作。
三、用於控制i/o行為和屬性的函式
#include int fcntl(int fd, int cmd, ...);
函式功能:
對檔案描述符進行各種控制操作
函式引數:
fd:備操作的檔案描述符
cmd:指定執行何種型別的操作。常用操作有
返回值:
失敗時返回-1並設定errno.
網路知識總結 (五)高階I O函式
pipe 函式用於建立乙個管道,以實現程序間通訊。include int pipe int fd 2 引數是乙個包含兩個 int 型整數的陣列指標。成功 返回 0 並將一對開啟的檔案描述符值傳入陣列中。失敗 返回 1,並設定errno。通過 pipe 函式建立的兩個檔案描述符 fd 0 和 fd 1...
網路程式設計常用I O函式
read write readv writev 對資料進行整合傳輪及傳送的函式。也就是說,通過writev 函式可以將分散儲存在多個緩衝中的資料一併傳送,通過readv函式可以由多個緩衝分別接收。因此,適當使用這2個函式可以減少i o函式的呼叫次數。下面先介紹writev 函式。include ss...
高階I O函式
套接字i o操作上設定超時的方法有以下3種 1.呼叫alarm,在指定超時期滿時產生sigalrm訊號。2.在select種阻塞等待i o,一次代替直接阻塞在read或write呼叫上。3.使用較新的so rcvtimeo和so sndtimeo套接字選項。以由呼叫者指定的超時上限呼叫connect...