socketpair - a slight generalization of pipes used for two-way stream communication.

以下内容来自:匠意雕码 http://my.oschina.net/zengsai/blog/12583

今天用了一个从没玩过的socket函数socketpair(),它的作用是在进程内创建一对sock连接。乍一看好像也没什么,但是配合fork()使用之后就是各种欢乐。如下。

#define STRING1 "message from parent"
#define STRING2 "messgae from child"

#include <sys/types.h>

#include <sys/socket.h>
#include <stdio.h>
#include <errno.h>

main()
{
int sockets[2], child;
char buf[1024];

/* Get the socket pair */
if (socketpair(AF_UNIX, SOCK_STREAM,
0, sockets) < 0) {
printf("error %d on socketpair\n", errno);
exit(1);
}

/* create child process */
if ((child = fork()) == -1) {
printf("fork error %d\n", errno);
exit(1);
}

if (child != 0) { /* this is the parent */
/* close child's end of socket */
close(sockets[0]);

/* read message from child */
if (read(sockets[1], buf, sizeof(buf)) < 0) {
printf("error %d reading socket\n", errno);
exit(1);
}
printf("-->%s\n", buf);

/* write message to child */
if (write(sockets[1],
STRING1, sizeof(STRING1)) < 0) {
printf("error %d writing socket\n", errno);
exit(1);
}

/* finished */
close(sockets[1]);

} else { /* the child */

/* close parent's end of socket */
close(sockets[1]);

/* send message to parent */
if (write(sockets[0], STRING2,
sizeof(STRING1)) < 0) {

printf("error %d writing socket\n", errno);
exit(1);
}

/* get message from parent */

if (read(sockets[0],
buf, sizeof(buf)) < 0) {
printf("error %d reading socket\n", errno);
exit(1);
}
printf("-->%s\n", buf);

/* finished */
close(sockets[0]);
}
}

转载于:https://www.cnblogs.com/xiayong123/archive/2011/10/11/3717213.html

Socketpair 简介相关推荐

  1. socketpair

    参考博客 https://blog.csdn.net/weixin_41010318/article/details/80221283 socketpair简介 socketpair()函数的声明: ...

  2. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  3. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  4. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  5. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  6. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

  7. 通俗易懂的Go协程的引入及GMP模型简介

    本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...

  8. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  9. TVM Operator Inventory (TOPI)简介

    TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...

最新文章

  1. Hibernate关于父类子类的映射
  2. c语言变量命名规则_带你学习C语言—变量
  3. 某一个接口403 其他接口可以调通_Neo的务实外设指南 篇三十六:一个就够,65W快充+C口混插+最多6个设备 - 飞利浦65W摩天轮插座_插座...
  4. 解决Atom插件安装下载问题
  5. puppeteer中如何复用启动中的浏览器
  6. 阿里云工程师用机器学习破解雾霾成因
  7. pip安装时ReadTimeoutError解决办法
  8. 《数据结构》-二叉树(二叉链表实现)
  9. 《算法导论》(第3版)第4章练习答案
  10. android百度在线音乐api,百度音乐免费API接口
  11. Git出现 Your local changes to the following files would be overwritten by merge: con
  12. A按键控制LED状态
  13. wordpress修复插件_如何修复WordPress中的“缺少临时文件夹”错误
  14. win10 屏幕保护时间到了不触发_你真的了解Win10么?网友教你玩转Win10!
  15. 互联网B端产品设计经验总结
  16. sklearn机器学习笔记:数据预处理与特征工程
  17. Apache Pulsar 首场亚洲峰会议题出炉:聚焦实战案例,火热报名中
  18. 文字+图片的混编(富文本)
  19. Tensorflow
  20. 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)

热门文章

  1. 快速理解binary cross entropy 二元交叉熵
  2. 为什么要在密码里加点“盐”
  3. 安装mariadb、安装Apache
  4. C++中父类的虚函数必需要实现吗?
  5. MM引擎新应用——爱车加油记
  6. 解决SVN提交代码时的错误:“Could not execute PROPPATCH”
  7. Lync Server 2010所需媒体网络流量带宽详解和计算
  8. 我能够为大家提供什么内容呢?
  9. 推荐一篇文章,.net3.0新特性
  10. 什么样的代码是好代码_什么是好代码?