匿名管道:
1、在父子程序之間進行通訊
2、它是乙個半雙工的通訊模式,具有固定的讀端和寫端
3、管道也可以看成是一種特殊的檔案,對於它的讀寫也可以使用普通的read、write等函式。但是它不是普通的檔案,並不屬於其他任何檔案系統,並且只存在於記憶體中。
函式:int pipe(int fd[2]);
傳入引數fd[2]陣列,管道的兩個檔案描述符,之後就可以直接操作這兩個檔案描述符。其中fd[0]是「讀」描述符,fd[1]是「寫」描述符。
**:#include
#include
#include
#include
#include
int main()
int fd[2] ;
pid_t pid;
char writebuf[100] = ;
char readbuf[100] = ;
int ret = pipe(fd);
if(ret < 0)
return -1;
pid = fork();
if(pid < 0)
return -1;
else if(pid == 0)
printf("child \n");
close(fd[1]);
ret = read(fd[0],readbuf,sizeof(char)*100);
if(ret > 0)
printf("read message:%s\n",readbuf);
close(fd[0]);
else
close(fd[0]);
strncpy(writebuf,"hello world",strlen("hello world");
write(fd[1],writebuf,strlen(writebuf));
close(fd[1]);
return 0;
使用gdb進行除錯:
gdb ./test
set follow-fork-mode parent
set detach-on-fork off
b main
ninfo inferior
inferior num
命名管道 匿名管道
有名字 則可以通過 名字 開啟相同的管道進行通訊,沒有名字 在核心中沒有明確標識 只能通過 子程序複製父程序的方式實現通訊,複製了檔案描述符 匿名管道只能用於具有親緣關係的程序間通訊。只要在建立程序之前建立管道,後邊的程序都可以實現通訊。命名管道可用於同一主機任意程序間通訊 作業系統在核心提供的一塊...
linux C 有名管道
匿名管道呢,只能使用在有親緣關係的程序之間,比如父子程序個兄弟程序,等等,因為匿名管道是乙個在記憶體中存在的檔案,其位址描述符只是在父子程序之中才有體現,為了克服該缺點,就有了命名管道的實現,命名管道呢,實際上就是乙個在檔案系統中儲存的檔案,命名管道是乙個裝置檔案,同時,該管道檔案也是fifo fi...
linux C命名管道
include include include include include include include include 命名管道 在系統中以特殊檔案形式存在,不同於匿名管道,是全雙工管道,發生在無親緣關係的程序間通訊 使用mkfifo建立命名管道,以open函式開啟命名管道檔案向管道中進行寫...