about 4 years ago

Pipe是由程式自己建立的”管道“

管道有兩端,一邊唯讀一邊唯寫

in —> [[安安我是管道]] —> out

這在shell中會時常用到
cat file1 | less
把 cat file1的stdout導到less的stdin,利用pipe當作中間的橋梁

這邊要記錄一下如何在C對pipe進行操作

[建立管道]
透過pipe()這個system call來建立

//[0] : read from pipe ,[1] : write to pipe
int pipe_fd[2];
//建立pipe,失敗回傳-1
pipe(pipe_fd);

[操作管道]
把操作pipe的方式想成跟stdin/stdout一樣就可以了

write(pipe_fd[1],Hello,5);//write to pipe
char buff[5];
read(pipe_fd[0],buff,5);//read from pipe

[關閉管道]
管道沒用一定要關掉,遵守有new就要free的原則,否則可能會產生deadlock

close(pipe_fd[0]); //close read end
close(pipe_fd[1]); //close write end

通常搭配fork來使用,使得process之間可以互相溝通

Reference:
http://www.gnu.org/software/libc/manual/html_node/Creating-a-Pipe.html
https://www.ptt.cc/bbs/b97902HW/M.1268932130.A.0CF.html

← C程式的記憶體使用方式 初探 Docker →
 
comments powered by Disqus