精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux 中的管道是什么?管道重定向是如何工作的?

系統(tǒng) Linux
本文中會有多個地方使用 Unix 這個術(shù)語(而不是Linux),因為管道的概念起源于 Unix。

我們在命令行中經(jīng)常會用到類似 cmd0 | cmd1 | cmd2 的寫法。其實,這是管道重定向(pipe redirection),用于將一個命令的輸出作為輸入重定向到下一個命令。

那么,你知道它具體是怎么工作的嗎?今天我們來詳細(xì)了解一下。

注:本文中會有多個地方使用 Unix 這個術(shù)語(而不是Linux),因為管道的概念起源于 Unix。

Linux 中的管道:總體思路

以下是關(guān)于“什么是 Unix 管道?”的內(nèi)容:

Unix 管道是一種 IPC(Inter Process Communication,進(jìn)程間通信)機(jī)制,它將一個程序的輸出轉(zhuǎn)發(fā)到另一程序的輸入。

現(xiàn)在,我們換一種更加專業(yè)且易懂的語言重新解釋一下:

Unix 管道是一種 IPC(Inter Process Communication,進(jìn)程間通信)機(jī)制,它接收程序的標(biāo)準(zhǔn)輸出(stdout),并通過緩沖區(qū)將其轉(zhuǎn)發(fā)給另一個程序的標(biāo)準(zhǔn)輸入(stdin)。

這樣的描述,大家應(yīng)該能理解了。參考下圖可以了解管道的工作原理:

管道命令的最簡單示例之一是將一些命令輸出傳遞給 grep 命令以搜索特定字符串。

比如,我們可以搜索名稱包含txt的文件,如下所示:

管道將標(biāo)準(zhǔn)輸出重定向到標(biāo)準(zhǔn)輸入,但不是作為命令參數(shù)

有個非常重要的一點(diǎn)需要注意,管道命令將標(biāo)準(zhǔn)輸出(stdout)傳遞到另一個命令的標(biāo)準(zhǔn)輸入(stdin),但不是作為參數(shù)。下面我們舉個例子來說明這一點(diǎn)。

如果我們不帶任何參數(shù)使用 cat 命令,它默認(rèn)會從 stdin 讀取內(nèi)容。看下面的例子:

$ cat
Hello, my friend.
^D
Hello, my friend.

在上面的例子中,沒有帶任何參數(shù)使用了 cat,因此它默認(rèn)會讀取 stdin。接下來,我寫了一行文字,然后按鍵 Ctrl+d 告訴它我寫完了(Ctrl+d 表示 EOF 或文件結(jié)束)。隨后,cat 命令讀取 stdin,然后把之前我寫的那行文字輸出到了終端中。

現(xiàn)在,看如下命令:

echo hey | cat

管道右邊的命令并不等于 cat hey。這里,標(biāo)準(zhǔn)輸出(stdout)"hey" 被放在了緩沖區(qū)(buffer),并被傳輸?shù)搅?cat 命令的標(biāo)準(zhǔn)輸入(stdin)。由于沒有命令行參數(shù),所以 cat 默認(rèn)讀取 stdin,而 stdin 中恰好有了內(nèi)容(即“hey”),因此 cat 讀取了這個內(nèi)容,并將其打印到 stdout。

為了演示這個區(qū)別,我們可以創(chuàng)建一個名為 hey 的文件,并在其中添加一些文本。參見下圖:

Linux 中的管道類型

Linux 中有兩種類型的管道:

1)匿名管道,也就是未命名管道;

2)命名管道。

匿名管道

顧名思義,匿名管道就是沒有名稱。當(dāng)你使用 | 符號時,它們就會由 Unix shell 動態(tài)創(chuàng)建了。

我們通常所說的管道,就是指的匿名管道。它用起來很方便,作為最終用戶,我們不需要跟蹤它的運(yùn)行,shell 自動會處理這一切。

命名管道

這個稍有不同,命名管道在文件系統(tǒng)中確實存在。它們像普通文件一樣存在,可以使用下面的命令創(chuàng)建命名管道:

mkfifo pipe

這將創(chuàng)建一個名為 pipe 的文件,執(zhí)行以下命令:

$ ls -l pipe
prw-r--r--. 1 gliu gliu 0 Aug 4 17:23 pipe

請注意開頭的“p”,這意味著該文件是一個管道。現(xiàn)在我們來使用這個管道。

如前所述,管道將命令的輸出轉(zhuǎn)發(fā)給另一個命令的輸入。這就像快遞服務(wù),你把包裹從一個地址送到另一個地址。因此,第一步是提供包裹。

echo hey > pipe

我們會看到 echo 信息沒有打印出來,看起來像是被掛起了。新打開一個終端,嘗試讀取該文件:

cat pipe

我們看下兩個終端的輸出結(jié)果,如下圖所示:

驚訝嗎?這兩個命令同時完成了執(zhí)行。

這是普通文件和命名管道之間的基本區(qū)別之一。在其他進(jìn)程讀取管道之前,不會將任何內(nèi)容寫入管道。

那么,為什么要使用命名管道呢?我們來看一下。

命名管道不會占用磁盤上的任何內(nèi)存。

如果我們執(zhí)行命令 du -s pipe,就會發(fā)現(xiàn)它不會占用任何空間。這是因為命名管道就像從內(nèi)存緩沖區(qū)讀寫的端點(diǎn)。寫入命名管道的任何內(nèi)容實際上都存儲在臨時內(nèi)存緩沖區(qū)中,當(dāng)從另一個進(jìn)程執(zhí)行讀取操作時,該緩沖區(qū)將被刷新。

節(jié)省 IO

因為寫入命名管道意味著將數(shù)據(jù)存儲到內(nèi)存中的緩沖區(qū)中,因此如果涉及大文件的操作的話,就會大幅減少磁盤 I/O。

兩個不同進(jìn)程之間的通信

通過使用命名管道,可以高效地從另一個進(jìn)程實時獲取事件的輸出。因為讀和寫同時發(fā)生,所以沒有等待時間。

較低層次的管道理解(針對高級用戶和開發(fā)人員)

接下來我們更深入的討論一下管道,以及具體的實現(xiàn)。這些需要對以下內(nèi)容有基本的了解:

  • C 程序工作原理;
  • 什么是系統(tǒng)調(diào)用;
  • 什么是進(jìn)程;
  • 什么是文件描述符。

我們不會很詳細(xì)的介紹這些概念,只討論與管道相關(guān)的內(nèi)容。對于大多數(shù)Linux用戶來說,下面的內(nèi)容可以選擇性的閱讀。

為了進(jìn)行編譯,在文章最后提供了一個示例 makefile。當(dāng)然,這只是用來說明的偽代碼。

看以下程序:

// pipe.c
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <errno.h>
extern int errno;
int main(){
signed int fd[2];
pid_t pid;
static char input[50];
static char buf[50];
pipe(fd);
if((pid=fork())==-1){
int err=errno;
perror("fork failed");
exit(err);
}
if(pid){
close(fd[1]);
read(fd[0], buf, 50);
printf("The message read from child: %s\n", buf);
} else {
close(fd[0]);
printf("Enter a message from parent: ");
for(int i=0; (input[i]=getchar())!=EOF && input[i]!='\n' && i<49; i++);
write(fd[1], input, 50);
exit(0);
}
return 0;
}

在第16行,我使用 pipe() 函數(shù)創(chuàng)建了一個匿名管道,傳遞了一個長度為 2 的帶符號整數(shù)數(shù)組。

這是因為管道只是一個包含兩個無符號整數(shù)的數(shù)組,代表兩個文件描述符。一個用于寫,一個用于讀。它們都指向內(nèi)存上的緩沖區(qū)位置,通常為1mb。

這里我將變量命名為fd。fd[0] 是輸入文件描述符,fd[1] 是輸出文件描述符。在該程序中,一個進(jìn)程將字符串寫入 fd[1] 文件描述符,另一個進(jìn)程從 fd[0] 文件描述符讀取。

命名管道也一樣,使用命名管道(而不是兩個文件描述符),你可以從任何一個進(jìn)程中打開一個文件,并像其他文件一樣對其進(jìn)行操作。同時應(yīng)記住管道的特性。

下面是一個示例程序,它執(zhí)行與前一個程序相同的操作,但它創(chuàng)建的不是匿名管道,而是命名管道:

// fifo.c
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
extern int errno;
#define fifo "npipe"
int main(void){
pid_t pid;
static char input[50];
static char buf[50];
signed int fd;
mknod(fifo, S_IFIFO|0700, 0);

if((pid=fork())<0){
int err=errno;
perror("Fork failed");
exit(err);
}
if(pid){
fd=open(fifo, O_RDONLY);
read(fd, buf, 50);
close(fd);
printf("The output is : %s", buf);
remove(fifo);
exit(0);
} else {
fd=open(fifo, O_WRONLY);
for(int i=0; (input[i]=getchar())!=EOF && input[i]!='\n' && i<49; i++);
write(fd, input, strlen(input));
close(fd);
exit(0);
}
return 0;
}

在這里,我使用 mknod 系統(tǒng)調(diào)用來創(chuàng)建命名管道。如你所見,雖然在完成時刪除了管道,但你可以不使用它,只需要打開并寫入本例中的 npipe 文件,就可以輕松的實現(xiàn)在不同進(jìn)程之間的通信。

其實現(xiàn)實中,我們也不必創(chuàng)建兩個管道來實現(xiàn)雙向通信,匿名管道就是這樣的。

以下是一個簡單的 Makefile 的源代碼示例(只是示例),將其與前面的程序放在同一個目錄中(分別為 pipe.c 和 fifo.c)。

CFLAGS?=-Wall -g -O2 -Werror
CC?=clang
build:
$(CC) $(CFLAGS) -o pipe pipe.c
$(CC) $(CFLAGS) -o fifo fifo.c
clean:
rm -rf pipe fifo

以上就是本次分享的關(guān)于 Unix 管道的全部內(nèi)容,歡迎討論。

責(zé)任編輯:龐桂玉 來源: TIAP
相關(guān)推薦

2020-12-09 11:10:12

shellLinux管道

2020-02-24 11:37:56

Linux重定向管道

2020-04-17 08:34:39

Linux管道

2009-06-17 17:13:40

UNIX

2021-02-20 20:36:56

Linux無名管道

2018-09-10 08:45:04

Linux管道命令

2009-06-17 09:11:24

Unix管道重定向

2021-07-02 16:30:01

CICDDevOps

2022-11-10 15:08:44

Linux輸入輸出

2023-01-30 15:55:08

2015-10-08 10:44:06

PB級數(shù)據(jù)管道處理Docker容器

2023-08-08 07:18:17

協(xié)程管道函數(shù)

2010-12-14 15:07:15

ICMP路由重定向

2017-01-19 19:14:20

Linux重定向命令

2010-03-09 16:11:59

Linux重定向

2023-05-05 08:18:38

Linuxsource命令

2021-07-13 11:12:49

Discover數(shù)據(jù)管道AI

2020-02-07 18:16:01

進(jìn)程線程底層原理

2014-07-02 21:20:56

CA TechnoloAPI

2010-10-25 16:52:48

oracle管道函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产香蕉视频在线| 成人做爰www看视频软件| 国产福利在线看| 日本人妖一区二区| 不卡av电影院| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 精品国产人妻一区二区三区| 悠悠资源网亚洲青| 中文字幕中文字幕一区| av一区二区三区免费| 日韩 欧美 综合| 超碰成人久久| 精品国产1区二区| 国产成人av影视| wwwav在线| 久久久久久久久久久99999| 国产精品你懂得| 久久久久免费看| 国内成人精品| 精品国产一区二区三区av性色| 乱妇乱女熟妇熟女网站| 日本不卡不卡| 91免费观看在线| 5g国产欧美日韩视频| av大片在线免费观看| 婷婷丁香综合| 亚洲免费视频在线观看| 在线成人免费av| 欧美大片免费观看网址| 夜夜嗨av一区二区三区四季av | 成 人 黄 色 片 在线播放| 性欧美xxxx大乳国产app| 久久精品国产久精国产思思| 97人妻精品一区二区三区免费| 免费一区二区三区四区| 婷婷中文字幕综合| 国产精品无码电影在线观看| 成人h小游戏| 99久久婷婷国产综合精品 | 加勒比成人在线| 在线观看美女网站大全免费| 99久久99精品久久久久久| 成人黄色免费片| 精人妻无码一区二区三区| 亚洲精品美女91| 久久99视频精品| 国精品无码一区二区三区| 深爱激情久久| 日韩精品视频免费| 国产成人精品无码片区在线| 伊人久久影院| 日韩欧美国产综合一区 | 国产suv精品一区二区883| 国产美女精彩久久| 国产suv精品一区二区33| 中文日韩在线| 午夜精品久久久久久久久久久久| 免费无遮挡无码永久在线观看视频| 久久电影院7| 一区二区三区天堂av| 亚洲天堂久久新| 亚洲免费成人av在线| 欧美精品一区二区三区在线| 免费不卡的av| 老司机成人在线| 亚洲国产精品va在看黑人| 91丝袜在线观看| 亚州综合一区| 亚洲男人的天堂网站| 野花社区视频在线观看| 亚洲警察之高压线| 亚洲图片欧美日产| 国偷自产av一区二区三区麻豆| 精品视频一区二区三区| 日韩天堂在线观看| 亚洲在线观看网站| 97视频一区| 欧美福利电影网| 奇米视频7777| 免费观看亚洲天堂| 精品免费视频一区二区| 国产麻豆xxxvideo实拍| 国产不卡一二三区| 中文字幕日韩电影| 玖玖爱免费视频| 一区二区久久| 国产精品久久久久久久7电影| 中文字幕1区2区3区| 久久精品99久久久| 亚洲最大激情中文字幕| 天天操天天干天天插| 久久久久九九视频| 中文字幕一区二区三区乱码| 美女91在线| 欧美性猛xxx| 亚洲涩涩在线观看| 国产96在线亚洲| 亚洲色图美腿丝袜| 中文字幕av久久爽av| 亚洲深夜av| 成人网在线观看| 婷婷综合激情网| 国产女同互慰高潮91漫画| 青青视频免费在线观看| 樱花草涩涩www在线播放| 欧美另类久久久品| 亚洲欧美色图视频| 午夜精品网站| 国产成人精品综合| 国产福利第一页| 国产欧美日产一区| 日本黄大片在线观看| 综合在线影院| 精品捆绑美女sm三区| 国产精品天天干| 欧美日本不卡| 国产美女精品免费电影| 午夜视频在线免费播放| 亚洲欧美另类综合偷拍| 国产成人亚洲精品无码h在线| 高清久久精品| 怡红院精品视频| 制服.丝袜.亚洲.中文.综合懂色| 久久超碰97中文字幕| 久久av一区二区三区漫画| 爆操欧美美女| 欧美色图在线观看| 日本xxx在线播放| 欧美黄色一区| 成人激情春色网| 国产乱理伦片a级在线观看| 亚洲va天堂va国产va久| 五月天六月丁香| 天天综合亚洲| 国产日韩欧美在线| 国产精品二线| 色综合天天综合网天天狠天天| 三上悠亚 电影| 国产精品99久久久久久动医院| 国产成人免费av| 欧美视频一二区| 亚洲精选视频免费看| 亚洲综合欧美激情| 欧美美女一区| 日韩av色综合| 免费看男男www网站入口在线| 亚洲高清中文字幕| 亚洲精品成人无码毛片| 欧美va天堂在线| 91在线高清视频| 男人天堂久久久| 欧美日韩在线三级| 国产视频三区四区| 日本va欧美va瓶| 手机成人在线| jizz久久久久久| 影音先锋日韩有码| 国产精品自拍视频| 国产精品玖玖玖| 国产精品国产三级国产专播品爱网| 成人免费视频久久| 蜜桃免费在线| 一本大道久久精品懂色aⅴ| 800av在线播放| 亚洲综合精品四区| 秋霞毛片久久久久久久久| 日韩av福利| 在线观看不卡av| 日本一区二区三区久久| 中文字幕一区二区三区蜜月 | 蜜桃在线一区二区三区精品| 欧美sm一区| 亚洲欧洲国产精品| 最近国语视频在线观看免费播放| 中文字幕第一页久久| 五月天开心婷婷| 国产精品www994| 国产亚洲精品美女久久久m| 欧美13videosex性极品| 亚洲性av在线| 国产精品乱码一区二区| 亚洲一区av在线| 国产熟妇搡bbbb搡bbbb| 男女男精品视频| 成人午夜视频免费观看| 日韩黄色网络| 国产日韩在线亚洲字幕中文| 四虎亚洲成人| 亚洲人成五月天| 国产熟女一区二区三区四区| 亚洲va中文字幕| 欧美成人久久久免费播放| 国产精品亚洲第一区在线暖暖韩国| 欧美在线一区视频| 日韩成人免费| 久久99久久99精品蜜柚传媒| 日本午夜免费一区二区| 97香蕉超级碰碰久久免费软件| 国产大学生校花援交在线播放| 日韩视频免费观看高清在线视频| 99久热在线精品996热是什么| 自拍偷在线精品自拍偷无码专区| 久久久国产精品无码| 激情久久五月天| 丰满少妇被猛烈进入高清播放| 日韩片欧美片| 免费一区二区三区| 视频精品一区| 国产精品日韩在线播放| 888av在线视频| 日韩中文字幕免费看| 午夜小视频在线播放| 日韩一级黄色片| japanese国产在线观看| 天天色天天操综合| 国产麻豆a毛片| 久久久久99精品一区| 波多野结衣三级视频| 麻豆传媒一区二区三区| 免费看的黄色大片| 国产精品啊v在线| 亚洲视频精品一区| 欧美女王vk| 国产一区二区在线网站| 国产一区二区高清在线| 国产精品久久久久久久久久尿| 国产免费拔擦拔擦8x高清在线人| 久久在线精品视频| 自拍视频在线| 在线精品国产欧美| 国产大学生校花援交在线播放| 日韩不卡在线观看| 欧美一级特黄aaaaaa| 欧美成人一级视频| 国产手机视频在线| 91精品国产色综合久久| 中文字幕精品在线观看| 色综合久久精品| 男女视频免费看| 亚洲国产视频在线| 久草视频免费在线| 亚洲综合一二区| 欧美黄片一区二区三区| 亚洲视频小说图片| 天天做夜夜爱爱爱| 亚洲视频免费看| 青花影视在线观看免费高清| 国产精品乱人伦| 人成免费在线视频| 亚洲国产精品黑人久久久| 久久无码人妻精品一区二区三区| 国产精品99久久久久| 亚洲综合20p| 国产成+人+日韩+欧美+亚洲| 美女流白浆视频| 成人午夜私人影院| 久久久久久婷婷| 不卡区在线中文字幕| 亚洲欧美日本一区| 国产亚洲成av人在线观看导航| 中文字幕国产专区| 国产精品视频观看| 亚洲 欧美 变态 另类 综合| 亚洲综合在线第一页| 韩国av免费观看| 在线影视一区二区三区| 一级黄色大毛片| 日韩一区二区免费电影| www夜片内射视频日韩精品成人| 欧美成人bangbros| 日韩二区三区| 中文字幕日韩精品有码视频| av小次郎在线| 性欧美xxxx视频在线观看| 625成人欧美午夜电影| 国产精品欧美亚洲777777| 亚洲高清国产拍精品26u| 99国产在线观看| 任你躁在线精品免费| 三区精品视频观看| 欧美久久综合| 久久精品.com| 国内精品在线播放| 亚洲国产综合视频| 国产精品免费视频观看| 久久久一区二区三区四区| 色美美综合视频| 国产剧情精品在线| 日韩精品在线观看网站| 一级毛片视频在线观看| 欧美精品精品精品精品免费| 免费观看欧美大片| 亚洲xxx大片| 精品国产91久久久久久浪潮蜜月| 国产又爽又黄ai换脸| 国产精品女主播一区二区三区| 91亚洲精品久久久蜜桃借种| 成人av网址在线| 午夜激情福利电影| 精品国产乱码久久久久酒店| 一级特黄aaaaaa大片| 亚洲国产美女精品久久久久∴| 天堂а√在线资源在线| 91国在线精品国内播放 | 亚洲一区网站| 深夜做爰性大片蜜桃| 国产人久久人人人人爽| 国产精品suv一区二区| 欧美视频一区二区三区| 天堂中文在线资源| 欧美成aaa人片免费看| 91在线亚洲| 九9re精品视频在线观看re6| 亚洲精品91| 在线观看免费黄网站| 91亚洲国产成人精品一区二三| 国产在线一卡二卡| 欧美色综合网站| 裸体xxxx视频在线| 国产做受高潮69| 亚洲91网站| youjizz.com亚洲| 免费久久精品视频| 久久久久久久久久久久| 精品久久久久久久久久国产| 午夜精品久久久久久久96蜜桃| 久久国内精品一国内精品| 日本成人伦理电影| 欧美美乳视频网站在线观看| 亚洲免费成人| 99久久久无码国产精品性波多| 《视频一区视频二区| 亚洲视屏在线观看| 亚洲一区二区久久| 肉色欧美久久久久久久免费看| 精品蜜桃一区二区三区| 激情欧美日韩| 香蕉在线观看视频| 亚洲一区二区美女| 黄频在线免费观看| 韩日精品中文字幕| 国产乱人伦精品一区| 青青青青在线视频| 高清国产一区二区三区| 欧美精品入口蜜桃| 欧美本精品男人aⅴ天堂| 中中文字幕av在线| 成人av免费看| 激情自拍一区| 国产精品九九视频| 精品久久久久久久中文字幕| 深夜福利视频网站| 91av国产在线| 国产欧美日韩影院| www.com操| 亚洲人成网站在线| 亚洲国产精品成人久久蜜臀| 久久6精品影院| 国产伦乱精品| 美女福利视频在线| 国产日本欧洲亚洲| 91国在线视频| 久久99久国产精品黄毛片入口| 亚洲精品福利| 国产日韩av网站| 久久嫩草精品久久久精品一| 免费无码国产精品| 久久久国产精品视频| 年轻的保姆91精品| 久久精品国产sm调教网站演员| 91色porny在线视频| 在线观看亚洲一区二区| 欧美猛交ⅹxxx乱大交视频| 国产欧美啪啪| 国产v亚洲v天堂无码久久久| 中文字幕亚洲欧美在线不卡| 精品人妻午夜一区二区三区四区 | 国产二区国产一区在线观看| 国产午夜精品一区二区理论影院| 亚洲精品视频久久| 久久影视精品| 欧美成人精品免费| 国产视频一区二区三区在线观看| 亚洲字幕av一区二区三区四区| 久久91亚洲人成电影网站| 人人精品视频| 亚洲精品在线视频播放| 亚洲成人一二三| 成人免费在线观看| 99精品99久久久久久宅男| 翔田千里一区二区| 日韩av手机在线免费观看| 精品福利一区二区三区| 成人自拍视频网| 又大又硬又爽免费视频| 国产精品天天看| 日本免费网站在线观看| 国产精品揄拍500视频| 亚洲精华国产欧美| 潮喷失禁大喷水aⅴ无码|