C 程序間通訊 有名管道,無名管道

2021-08-20 06:29:58 字數 1472 閱讀 1372

1.

管道的概念

管道是單向的、先進先出

的,它把乙個程序的輸出和另乙個程序的輸入連線在一起。

乙個程序(寫程序)在管道的

尾部寫入

資料,另乙個程序(讀程序)從管道的

頭部讀出

資料。資料被乙個程序讀出後,將被從管道中刪除,其它讀程序將不能再讀到這些資料。

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

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

//無名管道

#include #include #include #include int main()

pid = fork();

if(pid==0)

exit(0);

}else

if(write(pipe_fd[1],str1,strlen(str1))!=-1)

waitpid(pid,null,0);

close(pipe_fd[0]);

close(pipe_fd[1]);

}return 0;

}

//有名管道a

#include #include #include #include #include #include int main()

int fd = open ("myfifo", o_rdwr, 0666);

if (fd == -1)

char text = "this is jenkin test";

size_t towrite = strlen(text);

ssize_t written = write (fd, text, towrite);

if (written == -1)

sleep(10);

if (close (fd) == -1)

if (unlink ("myfifo") == -1)

return 0;

}

//有名管道b

#include #include #include #include #include #include int main()

char text[1024];

ssize_t readed = read (fd, text, 1024);

if (readed == -1)

printf("%s\n", text);

if (close (fd) == -1)

return 0;

}

程序間通訊 有名管道 無名管道

顧名思義,管道就像是將資料放入到乙個長長的管子中一樣,肯定會有一端寫入資料,稱為寫端,有一段讀出資料,稱為讀端。既然是說像管子一樣那麼它肯定有大小吧,資源不是無窮無盡的,預設下管道的大小是64k,用ulimit a 可以檢視。1 無名管道 管道是半雙工的,資料只能向乙個方向流動 需要雙方通訊時,需要...

Linux程序間通訊 無名 有名管道

管道是linux中程序間通訊的一種方式,它把乙個程序的輸出直接連線另乙個管道的輸入。linux的管道包括兩種 無名管道和有名管道。特點 只能用於具有親緣關係的程序間通訊 及父子或者兄弟程序 是一種單工的通訊模式,具有固定的讀端和寫端。管道也可以看成一種特殊的檔案進行操作,對於它的讀寫也可以使用普通的...

程序間通訊 無名管道

在上次的部落格中,我給大家介紹了程序間通訊的方式 有名管道。管道分為有名管道和無名管道,那麼此次我將給大家介紹一下另一種管道通訊 無名管道。有名管道是可以應用於任何兩個程序之間資料的單向傳遞,而無名管道是相對於有名管道的,無名管道在使用時產生,不使用後釋放,並不會在系統上留下任何痕跡。無名管道因其使...