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...