unix下管道程式設計

2021-06-29 15:19:07 字數 1540 閱讀 4050

模型pipe-close-dup2-read/write

(使用fopen和fclose的繞行自行查閱相關資料)

首先基本了解這四個函式的分別作用:

#include

intpipe(int filedes[2]);

返回值:成功,返回0,否則返回-1。引數陣列包含pipe使用的兩個檔案的描述符。fd[0]:讀管道,fd[1]:寫管道。

#include 

intclose (int filedes);

返回值:成功為0,若出錯為- 1。關閉乙個檔案時也釋放該程序加在該檔案上的所有記錄鎖。當乙個程序終止時,它所有的開啟檔案都由核心自動關閉。很多程式都使用這一功能而不顯式地用close關閉開啟的檔案。

#include 

int dup(int oldfd);

int dup2(int oldfd, int newfd);

dup的用法: newfd = dup(oldfd);

dup2的用法: dup2(old,newfd);

如果呼叫成功,這兩個函式都返回新分配或指定的檔案描述符,如果出錯則返回-1。dup返回的新檔案描述符一定該程序未使用的最小檔案描述符,這一點和open類似。dup2可以用newfd引數指定新描述符的數值。如果newfd當前已經開啟,則先將其關閉再做dup2操作,如果oldfd等於newfd,則dup2直接返回newfd而不用先關閉newfd再複製。

#include 

ssize_t read(int fd, void *buf, size_t count);

ssize_t write(int fd, const void *buf, size_t count);

返回值:成功返回讀取的或者寫入的位元組數,出錯返回-1並設定errno,如果在調read之前已到達檔案末尾,則這次read返回

0 其中檔案描述符貫穿整個模型,用來實現管道的資料傳遞。

具體實現:

int fd[2];

char *buf;

int sizeofbuf;

父程序:

close(1); //關閉標準輸出

dup2(fd[1],1); //將管道輸出重定向代替標準輸出

close(fd[0]); //關閉管道輸入

write(fd[1],buf,sizeofbuf);//寫入管道fd[1]

子程序:

close(0); //關閉標準輸入,為從管道讀入做準備

dup2(fd[0],0); //重定向管道輸入作為標準輸入

close(fd[1]); //關閉管道輸出,確定管道流的方向

read(fd[0],buf,sizeofbuf);//讀管道內的資料

必要的話:

dup2(0,fd[0]); //重新開啟標準輸入

dup2(1,fd[1]); //重新開啟標準輸出

詳細的各個函式的用法自行查詢

Linux下管道程式設計

功能 父程序建立乙個子程序父程序負責讀使用者終端輸入,並寫入管道 子程序從管道接收字元流寫入另乙個檔案 include include include include include include include define max 100 intmain pid fork 建立子程序 if p...

linux下管道命令

想必很多剛接觸linux尤其是在redhat環境下,大家都見過 rpm qa grep 或者rpm qa sort之類的命令,但是並不知道 是乙個什麼符號。管道符號,是unix功能強大的乙個地方,符號是一條豎線 用法 command 1 command 2 他的功能是把第乙個命令command 1執...

Linux環境下管道FIFO傳輸

本例用到3個檔案 建立管道 往管道裡寫資料 從管道裡讀資料。fifo write.c include include include include include include include include define bufes pipe buf int main void for i 0...