管道的相關知識

2021-07-23 22:51:51 字數 1594 閱讀 1531

1)特點:

1.管道是單向的、先進先出的,它把乙個程序的輸出和另乙個程序的輸入連線在一起。 

2.乙個程序(寫程序)在管道的尾部寫入資料,另乙個程序(讀程序)從管道的頭部讀出資料 

3.管道提供了簡單的流控制機制,程序試圖讀空管道時,程序將阻塞。同樣,管道已經滿時,程序再試圖向管道寫入資料,程序將阻塞 

4.管道包括無名管道和有名管道兩種,前者用於父程序和子程序間的通訊,後者可用於執行於同一系統中的任意兩個程序間的通訊。 

2)程式實現

1.無名管道

無名管道建立: 

int pipe(int filedis[2]); 

當乙個管道建立時,它會建立兩個檔案描述符: 

filedis[0] 用於讀管道, 

filedis[1] 用於寫管道

#include 

#include

#include

#include

int main()

/*建立子程序*/

if((pid=fork())==0) //子程序 or 父程序?

close(pipe_fd[0]);

exit(0);

}else

if(pid>0)

return

0;}

2.有名管道 

read檔案

#include 

#include

#include

#include

#include

#include

#include

#define fifo "/tmp/myfifo"

main(int argc,char** argv)

while(1)

printf("read %s from fifo\n",buf_r);

sleep(1);

}

pause(); /*暫停,等待訊號*/

unlink(fifo); //刪除檔案

}

write檔案

#include 

#include

#include

#include

#include

#include

#include

#define fifo_server "/tmp/myfifo"

main(int argc,char** argv)

strcpy(w_buf,argv[1]);

/* 向管道寫入資料 */

if((nwrite=write(fd,w_buf,100))==-1)

else

printf("write %s to the fifo\n",w_buf);

}

注意點:管道使用和檔案操作的區別?

除了建立函式不同,其他的使用函式都相同,唯一不同的是檔案中的資料讀出來了還存在在檔案中,但是fifo中的資料在讀出來之後就消失了。

常用管道相關命令

釋義 根據條件從命令結果中提取對應內容 引數 c 按字元選取行中內容 d 指定以 中內容為分割符 f n1 n2 分割後顯示第幾段的內容 u 去重 n 按照數值大小排序 r 使次序顛倒 例 root node01 tmp sort nr 2.txt t 指定字段分隔符 k 根據那一列排序 例 roo...

Linux管道命令及管道相關命令 詳細

4.sort 排序 5.wc 命令 5.3 小結 6.uniq 去重 6.3 小結 7.tee命令 7.3 小結 8.tr 命令 這可不是html的 行哦 9.split 命令 9.3 小結 命令a 命令b 命令a的輸出當做命令b的輸入 管道是一種通訊機制,通常用於程序間的通訊 也可通過socket...

mysql相關知識 MySQL相關知識

字串拼接 select from tablename where mydata like concat curdate limit 3 這裡concat是字串拼接,concat mys q l mysql 顯示日期不帶時間的函式,如 2015 05 14 curdate 是日期不算時間 2015 0...