全双工管道
来源:互联网 发布:淘宝情趣女模特 编辑:程序博客网 时间:2024/04/28 14:26
管道创建:
int pipe(int fd[]);
fd[0]/fd[1]分别对应:读、写
全双工管道,顾名思义就是数据通讯是双向的,即fd[0]/fd[1]都可用来读或者写
摘录一个小例子(来自Unix Neworking Programming Volume 2 Interprocess communications)
稍改动过:
#include <stdio.h>#include <errno.h>#include <unistd.h>#include <sys/socket.h>#include <sys/types.h>#define MAXLINE 255void error_msg_quit(char *string, int line){ char msg[MAXLINE] = {0}; int len = 0; sprintf(msg, "%s", string); len = strlen(string); snprintf(msg + len, strlen(strerror(errno)), ",line:%d,%s\n", line, strerror(errno)); fputs(msg, stdout); exit(errno);}int main(int argc, char **argv){ int fd[2], n; char ch; pid_t child_pid; //create pipe //pipe(fd); socketpair(AF_UNIX, SOCK_STREAM, 0, fd);//if donot set this option,it won't work properly. if ((child_pid = fork()) == 0) { //child sleep(3); if ((n = read(fd[0], &ch, 1)) != 1) { error_msg_quit("read error", __LINE__); } printf("child read:%c\n", ch); write(fd[0], "c", 1); exit(0); } //parent write(fd[1], "p", 1); if ((n = read(fd[1], &ch, 1)) != 1) { error_msg_quit("read error", __LINE__); } printf("parent read:%c\n", ch); exit(0);}
socketpair这个系统调用是后来自己加的,如果不加的话,程序是不太正常的,加了这句话这后,说明这里创建的管道就是全双工的了~或者因为编译平台不同,程序执行结果也会不同吧,书上说利用pipe而没有这里的socketpair函数,可以得到期望的结果,但是在我的fedora上没有出现,solaris上能不能ok我也不知~!
- 全双工管道
- 管道 pipe 半双工/全双工
- 共享内存:全双工匿名管道
- 如何才能在linux下建立全双工管道。
- 验证全双工管道两端同时写不会干扰
- socketpair创建双向通信的管道(全双工通信)
- 全双工、半双工
- 全双工
- linux管道双工聊天
- 全双工与半双工
- 单工半双工和全双工
- 半双工与全双工
- Linux下用管道实现进程全双工通信的代码
- 全双工以太网
- WCF全双工数据传输
- 全双工的WebSocket
- 管道通信(半双工)
- FIFO管道/命名管道(半双工)
- 傻瓜式配置FCK编辑器
- Android编译过程详解(二)
- [2] JAVA知识补充
- Windows 系统命令行程序一览:
- sysfs文件系统
- 全双工管道
- Unity引擎初探
- 图像相似度计算
- Unicode是什么 UTF-8是什么 .
- 百度编程大赛试题----数7 加强版游戏(C++算法实现)
- 演讲会记录
- Ubuntu下升级GCC
- ios学习--为iOS5设计消息通知的实现方法
- SQL Insert唯一字段效率