linux的套接口和管道
创建管道的函数:
#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的套接口和管道相关推荐
- 套接口学习(一)实现
套接口这个概念最先由4.2BSD(1983)引入.如今已经成为一个通用的网络应用程序编程接口.受到全部操作系统的支持.套接口层位于应用程序和 协议栈之间,相应用程序屏蔽了与协议相关实现的详细细节. 通 ...
- 《linux核心应用命令速查》连载十四:fuser:用文件或者套接口表示进程
fuser:用文件或者套接口表示进程 作用:fuser命令用文件或者套接口表示进程. 用法:fuser [-a | -s | -c] [-4 | -6] [-n space] [-k [-i] [-s ...
- Linux Socket学习--套接口的类型和协议
我们首先来说一下PF_INET和AF_INET,虽然标准提倡在指定demain参数的时候,优先使用PF_INET,但是大量已经编写的c代码遵循旧的协议.目前情况是AF_UNIX=PF_UNIX,AF_ ...
- Linux Socket学习--为套接口绑定地址
当我们使用socket函数创建一个套接口之后,这个套接口就处于无名状态,虽然之前我们提到即使没有地址,套接口也能使用,但是这个只限于套接口对在同一个Linux内核中,如果位于两台不同的主机的套接口需要 ...
- linux 套接口文件_继上一篇,继续介绍linux 套接口
继上一篇socket层的介绍,接着说说linux的socket层的知识点,我们知道,在linux系统上,一切皆文件,之所以这么说,是因为linux系统的抽象层的设计是非常到位的,对于操作系统上的很多子 ...
- Linux原始套接字学习总结
Linux网络编程:原始套接字的魔力[上] http://blog.chinaunix.net/uid-23069658-id-3280895.html 基于原始套接字编程 在开发面向连 ...
- linux udp套接字编程获取报文源地址和源端口(二)
之前项目中涉及udp套接字编程,其中一个要求是获取客户端发过来报文的端口和ip地址,功能很简单,只是对这一块不很熟.之前使用的方法是通过调用recvmsg这个接口,并通过参数msg里面的msg_nam ...
- Linux原始套接字实现分析---转
http://blog.chinaunix.net/uid-27074062-id-3388166.html 本文从IPV4协议栈原始套接字的分类入手,详细介绍了链路层和网络层原始套接字的特点及其内核 ...
- C语言socket getsockopt() setsockopt()函数(获取和设置套接口的选项?)
文章目录 man 文档(越看越懵逼啊!) 解释 getsockopt()函数用于获取任意类型.任意状态套接口的选项当前值,并把结果存入optval. setsockopt()函数用于任意类型.任意状态 ...
最新文章
- Oracle 10g RAC Installer 故障之--Oracle软件安装无法发现集群
- Linux上安装ZooKeeper并设置开机启动(CentOS7+ZooKeeper3.4.10)
- 【clickhouse】clickhouse 最佳实践
- Redis之-字符串类型
- C++中对sprintf()
- HP增霸卡出现“网络配置错误,请正确配置网卡”的原因
- 超定方程组最小二乘matlab,超定方程组最优解(最小二乘解)推导
- 红米(RedmiBook)笔记本无线网卡QCA6174在Linux下wifi异常解决方法
- ITIL v3 中级认证
- RTA和RTB的区别
- 服务器硬盘用在硬盘录像机,网络硬盘录像机是干什么用的
- 青春不是用来抱怨,而是用来奋斗的
- PC屏幕颜色识别实现鼠标自动点击
- 技巧1——怎样查看linux发行版本名称和版本号?
- 初学微信云开发,云函数实现两数相加
- java手机验证码登陆_在Web项目中手机短信验证码实现的全过程记录
- 信号强度 android,一种获取手机信号强度的方法
- vue3使用setup代替created
- 解决no matching host key type found. Their offer: ssh-rsa报错信息具体方法
- ​科普:什么是WiFi 6