创建管道的函数:

#include <unistd.h>
int pipe(int pipefd[2]);

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

  创建管道的例子:

#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int
main(int argc, char *argv[])
{int pipefd[2];pid_t cpid;char buf;if (argc != 2) {fprintf(stderr, "Usage: %s <string>\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 <sys/types.h>
#include <sys/socket.h>
int socketpair(int domain, int type, int protocolint " sv [2]);

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

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>#include <sys/types.h>
#include <sys/socket.h>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;
}

   下一篇:套接口和I/O通信

linux的套接口和管道相关推荐

  1. 套接口学习(一)实现

    套接口这个概念最先由4.2BSD(1983)引入.如今已经成为一个通用的网络应用程序编程接口.受到全部操作系统的支持.套接口层位于应用程序和 协议栈之间,相应用程序屏蔽了与协议相关实现的详细细节. 通 ...

  2. 《linux核心应用命令速查》连载十四:fuser:用文件或者套接口表示进程

    fuser:用文件或者套接口表示进程 作用:fuser命令用文件或者套接口表示进程. 用法:fuser [-a | -s | -c] [-4 | -6] [-n space] [-k [-i] [-s ...

  3. Linux Socket学习--套接口的类型和协议

    我们首先来说一下PF_INET和AF_INET,虽然标准提倡在指定demain参数的时候,优先使用PF_INET,但是大量已经编写的c代码遵循旧的协议.目前情况是AF_UNIX=PF_UNIX,AF_ ...

  4. Linux Socket学习--为套接口绑定地址

    当我们使用socket函数创建一个套接口之后,这个套接口就处于无名状态,虽然之前我们提到即使没有地址,套接口也能使用,但是这个只限于套接口对在同一个Linux内核中,如果位于两台不同的主机的套接口需要 ...

  5. linux 套接口文件_继上一篇,继续介绍linux 套接口

    继上一篇socket层的介绍,接着说说linux的socket层的知识点,我们知道,在linux系统上,一切皆文件,之所以这么说,是因为linux系统的抽象层的设计是非常到位的,对于操作系统上的很多子 ...

  6. Linux原始套接字学习总结

    Linux网络编程:原始套接字的魔力[上] http://blog.chinaunix.net/uid-23069658-id-3280895.html 基于原始套接字编程        在开发面向连 ...

  7. linux udp套接字编程获取报文源地址和源端口(二)

    之前项目中涉及udp套接字编程,其中一个要求是获取客户端发过来报文的端口和ip地址,功能很简单,只是对这一块不很熟.之前使用的方法是通过调用recvmsg这个接口,并通过参数msg里面的msg_nam ...

  8. Linux原始套接字实现分析---转

    http://blog.chinaunix.net/uid-27074062-id-3388166.html 本文从IPV4协议栈原始套接字的分类入手,详细介绍了链路层和网络层原始套接字的特点及其内核 ...

  9. C语言socket getsockopt() setsockopt()函数(获取和设置套接口的选项?)

    文章目录 man 文档(越看越懵逼啊!) 解释 getsockopt()函数用于获取任意类型.任意状态套接口的选项当前值,并把结果存入optval. setsockopt()函数用于任意类型.任意状态 ...

最新文章

  1. Oracle 10g RAC Installer 故障之--Oracle软件安装无法发现集群
  2. Linux上安装ZooKeeper并设置开机启动(CentOS7+ZooKeeper3.4.10)
  3. 【clickhouse】clickhouse 最佳实践
  4. Redis之-字符串类型
  5. C++中对sprintf()
  6. HP增霸卡出现“网络配置错误,请正确配置网卡”的原因
  7. 超定方程组最小二乘matlab,超定方程组最优解(最小二乘解)推导
  8. 红米(RedmiBook)笔记本无线网卡QCA6174在Linux下wifi异常解决方法
  9. ITIL v3 中级认证
  10. RTA和RTB的区别
  11. 服务器硬盘用在硬盘录像机,网络硬盘录像机是干什么用的
  12. 青春不是用来抱怨,而是用来奋斗的
  13. PC屏幕颜色识别实现鼠标自动点击
  14. 技巧1——怎样查看linux发行版本名称和版本号?
  15. 初学微信云开发,云函数实现两数相加
  16. java手机验证码登陆_在Web项目中手机短信验证码实现的全过程记录
  17. 信号强度 android,一种获取手机信号强度的方法
  18. vue3使用setup代替created
  19. 解决no matching host key type found. Their offer: ssh-rsa报错信息具体方法
  20. ​科普:什么是WiFi 6

热门文章

  1. 《数据结构》学习笔记一:绪论
  2. 如何在Mac OS下用ISO包制作启动U盘
  3. python中的mysql数据库like模糊查询
  4. 阿里云分析性数据库的发展历史
  5. 【POJ1144】Network
  6. 浅谈精品游戏的研发与发行-蓝港廖明香
  7. 编写一个关于小型界面文件。
  8. 我的服务器有硬件防火墙,而且只开了80端口,是不会有网络安全问题的
  9. Tomcat 5.5 配置 MySQL 数据库连接池
  10. 【第41题】【062题库】2019年OCP认证062考试新题