博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux的套接口和管道
阅读量:6402 次
发布时间:2019-06-23

本文共 1709 字,大约阅读时间需要 5 分钟。

  创建管道的函数:

#include 
int pipe(int pipefd[2]);

  pipefd[0]代表管道读出端的文件描述符,pipefd[1]代表管道写入端的文件描述符。信息只能从pipefd[0]读出,也只能重pipefd[1]写进。所以实现的通信就是单项的,如果要实现双向通信的话可以采用建立两个管道。不过也可以使用套接字通信。因为套接字的通信是双向的。

  创建管道的例子:

#include 
#include
#include
#include
#include
intmain(int argc, char *argv[]){ int pipefd[2]; pid_t cpid; char buf; if (argc != 2) {   fprintf(stderr, "Usage: %s
\n", argv[0]);   exit(EXIT_FAILURE); } if (pipe(pipefd) == -1) { perror("pipe"); exit(EXIT_FAILURE); } cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { /* 子进程从管道中读取 */ close(pipefd[1]); /* 读的时候先关闭不用的写进端 */ while (read(pipefd[0], &buf, 1) > 0) write(STDOUT_FILENO, &buf, 1); write(STDOUT_FILENO, "\n", 1); close(pipefd[0]); _exit(EXIT_SUCCESS); } else { /* 父进程向管道写入 argv[1]*/ close(pipefd[0]); /* 写之前关闭不用的读出端*/ write(pipefd[1], argv[1], strlen(argv[1])); close(pipefd[1]); /* Reader will see EOF */ wait(NULL); /* Wait for child */ exit(EXIT_SUCCESS); }}

  

  创建套接口的函数:

#include 
#include
int socketpair(int domain, int type, int protocolint " sv [2]);

  sv[2]是指向接收用于引用套接口文件描述符数组的指针。类似于管道中的端点。使用例子:

 

#include 
#include
#include
#include
#include
#include
#include
int main(){ int z; int s[2]; z = socketpair(AF_LOCAL,SOCK_STREAM,0,s); if (z==-1) { fprintf(stderr,"%s:socketpair(AF_LOCAL,SOCK_STREAM,0)\n",strerror(errno)); exit(1); } printf("s[0]=%d;\n",s[0]); printf("s[1]=%d;\n",s[1]); return 1; }

   下一篇:

转载地址:http://lknea.baihongyu.com/

你可能感兴趣的文章
IOS 多线程
查看>>
python序列化数据本地存放
查看>>
#CCNA#IP地址、子网划分参考资料网址
查看>>
比较不错的图片上传插件
查看>>
判偶不判奇
查看>>
Sequelize 数据库的支持
查看>>
BigDecimal类的加减乘除
查看>>
lighttpd中实现每天一个访问日志文件
查看>>
node.js发送邮件email
查看>>
查看nginx配置文件路径的方法
查看>>
接口性能调优方案探索
查看>>
kali安装包或更新时提示“E: Sub-process /usr/bin/dpkg return”
查看>>
网站管理后台模板 Charisma
查看>>
EL:empty的用法
查看>>
Saltstack配置之 nodegroups
查看>>
Servlet和JSP优化经验总结
查看>>
squid使用rotate轮询(分割)日志
查看>>
VS2015安装EF Power Tools
查看>>
MySQL主从复制(笔记)
查看>>
keepalived高可用集群的简单配置
查看>>