管道

xiaoxiao2021-02-28  11

#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个字节。有名管道可以任意两个进程之间通信,无名管道只能有亲缘关系的进程间通信。管道间所传递的是无格式字节流,所以需要两个进程之间确定好数据的大小。管道中的数据只存在于内存中。

转载请注明原文地址: https://www.6miu.com/read-1100150.html

最新回复(0)