linux C 匿名管道

匿名管道:

1、在父子进程之间进行通信

2、它是一个半双工的通信模式,具有固定的读端和写端

3、管道也可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。

函数:

int  pipe(int fd[2]);

传入参数fd[2]数组,管道的两个文件描述符,之后就可以直接操作这两个文件描述符。其中fd[0]是“读”描述符,fd[1]是“写”描述符。

代码:

#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

#include <stdlib.h>

#include <string.h>

int main()

{

int fd[2] ;

pid_t pid;

char writebuf[100] = {0};

char readbuf[100] = {0};

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

                                n

                                .

                               .

                               .

                              info inferior

                              inferior num







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值