(进程间通信)linux c语言实现匿名管道
原创
©著作权归作者所有:来自51CTO博客作者wx631a9cd48516d的原创作品,请联系作者获取转载授权,否则将追究法律责任
(匿名管道是内存上的特殊文件,命名管道是硬件上的特殊文件,这个特殊文件进程结束之后打开没有东西,共享文件是硬件上的普通文件,这个文件进程结束之后打开可以看到东西)
匿名管道因为没有“名”,所以只能用于父子进程间通信。
ret = pipe(pipefd);创建管道
fp = fork();创建进程
/***************************************************
##filename : ampipe.c
##author : GYZ
##create time : 2018-10-18 10:42:01
##last modified : 2018-10-18 11:13:14
##description : NA
***************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc,char *argv[])
{
int pipefd[2];
char buf[100];
int ret = 0;
pid_t fp;
ret = pipe(pipefd);
if(0 != ret)
{
perror("pipe"),exit(0);
}
fp = fork();
if(fp < 0)
{
perror("fork"),exit(0);
}
else if(0 < fp)
{
printf("this is in the father process,write a string to the pipe...\n");
char str[] = "hi,my child,i am your father";
write(pipefd[1],str,sizeof(str));
sleep(1);
close(pipefd[0]);
close(pipefd[1]);
}
else
{
printf("this is in the child process,read a string from the pipe...\n");
read(pipefd[0],buf,sizeof(buf));
printf("read : %s\n",buf);
sleep(1);
close(pipefd[0]);
close(pipefd[1]);
}
waitpid(fp,NULL,0);
return 0;
}