(1)无名管道
无名管道(半双工通信的管道,父子进程间的通信)
使用:
无名管道的使用需要用到头文件:#include <unistd.h>
无名管道的函数原型:int pipe(int pipefd[2]);
这里的参数:pipefd包含了两个元素的整型数组
其函数返回值:成功返回0,失败:-1
代码:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
int main(int argc,int *argv[])
{
int pipefd[2];//定义包含了两个元素的整形数组pipefd
int ret=pipe(pipefd);
if(ret==-1)
{
printf("创建无名管道失败\n");
return -1;
}
pid_t pid=fork();//创建子进程
if(pid<0)
{
printf("创建子进程失败\n");
return -1;
}
else if(pid==0)
{
//子进程
char buf[100]="dasdasda";
write(pipefd[1],buf,strlen(buf));//将数据写入管道
/*
自己输入
char buf[100];
fgets(buf,100,stdin);
write(pipefd[1],buf,strlen(buf));
*/
}
else if(pid>0)
{
//父进程
char buf[100];
read(pipefd[0],buf,sizeof(buf));//读出管道的数据
printf("from child:%s\n",buf);
wait(NULL);//等待子进程退出
}
return 0;
}