#include<stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <unistd.h>
int main()
{
int fd[2];
if(pipe(fd)<0)
{
return -1;
}
int pid = fork();
if (pid == 0)
{
char *str="niaho zhongguo";
sleep(12);
int res = write(fd[1], str, strlen(str));
if(res < 0)
printf(" write fail");
else
printf(" write ok");
exit(-1);
}
///sleep(12);
char *buff = (char *)malloc(sizeof(char)*1024);
assert(buff!=NULL);
int ret;
ret = read(fd[0],buff,1024);
if (ret < 0)
printf("read error");
else
printf("%s", buff);
return 0;
}
常说管道是半双工的,但是又说管道只能单向通信,在网络中定义半双工是双方都可以通信,但是不能同时发送消息,而单工是只能有一个方向的通信而没有反方向的交互。难道说是linux下的单工,半双工定义不同。
如果在一个进程中开辟两个管道,则可以实现双方的通信,则就是名义上的半双工。
有名管道和无名管道的区别:
管道中的数据都是有大小限制的,65536个字节。有名管道可以任意两个进程之间通信,无名管道只能有亲缘关系的进程间通信。管道间所传递的是无格式字节流,所以需要两个进程之间确定好数据的大小。管道中的数据只存在于内存中。