linux C 匿名管道
来源:互联网 发布:vue.js验证手机号码 编辑:程序博客网 时间:2024/06/05 03:34
匿名管道:
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