linux C 匿名管道

2021-08-14 02:03:30 字數 1166 閱讀 1978

匿名管道:

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函式開啟命名管道檔案向管道中進行寫...