3 無名管道2

2021-07-26 07:46:53 字數 1752 閱讀 6749

1.無名管道的快取是由大小的,快取滿了,會出現寫阻塞。

2.例項1,計算快取大小:

#include "unistd.h"

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

int main()

; ret=pipe(fd);

if(ret <0)

printf("creat pipe sucess fd[0]=%d,fd[1]=%d\n",fd[0],fd[1]);

while( i < 5456)

printf("write pipe end\n");

close(fd[0]);

close(fd[1]);

return 0;

}

執行結果:

alex@alex-virtual-machine:/extra/process/003$ gcc pipe_4.c

alex@alex-virtual-machine:/extra/process/003$ ./a.out

creat pipe sucess fd[0]=3,fd[1]=4

write pipe end

3.例項2:

通過無名管道,父程序先執行,子程序後執行。

先pipe再fork,子程序繼承父程序的檔案描述符,所以可以父子程序間通訊。

#include "unistd.h"

#include "stdio.h"

#include "sys/types.h"

#include "stdlib.h"

int main()

printf("creat pipe sucess\n");

pid = fork();

if(pid ==0)//child process code second

}if(pid >0)//parent process code first

process_inter=1;

sleep(5);

write(fd[1],&process_inter,1);

} while(1);

return 0;

}

執行結果:

alex@alex-virtual-machine:/extra/process/003$ gcc fork.c

alex@alex-virtual-machine:/extra/process/003$ ./a.out

creat pipe sucess

this is parent process i=0

this is parent process i=1

this is parent process i=2

this is parent process i=3

this is parent process i=4

this is child process i=0

this is child process i=1

this is child process i=2

this is child process i=3

this is child process i=4

無名管道的特點亦是缺點,只能在父子程序(有親緣關係的程序)間通訊。

linux管道(無名管道)

首先管道是程序之間的乙個單向資料流,它的資料流向由核心管理,只能從乙個程序流向另外乙個程序,乙個程序向管道寫入資料,另外乙個程序從這個管道讀取資料。在使用管道 無名管道 時,只能用在父子程序或者親屬程序之間,若要用在任意程序之間則需要使用fifo 有名管道 如圖程序ab通過管道進行資料交換。程序a通...

Linux管道(無名管道)

是一套免費使用和自由傳播的類unix作業系統,是乙個基於posix和unix的多使用者 多工 支援多執行緒和多cpu的作業系統。它能執行主要的unix工具軟體 應用程式和網路協議。它支援32位和64位硬體。linux繼承了unix以網路為核心的設計思想,是乙個效能穩定的多使用者網路作業系統。它主要用...

程序間通訊(2) 無名管道

1.無名管道 1.1 概念 相對於有名管道,沒有名稱,不能在任意程序之間使用,只能應用與父子程序之間,其原理是父子之間共享檔案描述符,所以fork 之前開啟無名管道 1.2建立並開啟 int pipe int fd 2 函式庫裡 fd 0 寫端 fd 1 讀端 1 include 2 include...