socketpair
来源:互联网 发布:抠抠视频秀算法注册机 编辑:程序博客网 时间:2024/05/30 05:29
socketpair,套接字可以用于网络通信,也可以用于本机内的进程通信
- 外文名
- socketpair
- 性 质
- 科学
- 类 别
- 计算机
- 属 于
- 编程
目录
- 1新建一对socket
- 2用socketpair实现父子进程双工通信
套接字可以用于网络通信,也可以用于本机内的进程通信。由于本机内进程的IP地址都相同,因此只需要进程号来确定通信的双方。非网络通信套接字在Linux环境中的应用很多,最典型的就是Linux的桌面系统——Xserver,其就是使用非网络套接字的方法进行进程之间的通信的。
Linux环境下使用socketpair函数创造一对未命名的、相互连接的UNIX域套接字。
定义
int socketpair(int d, int type, int protocol, int sv[2]);描述
建立一对匿名的已经连接的套接字
socketpair函数概要如下:
#include <sys/types.h>
#include <sys/socket.h>
int socketpair(int domain, int type, int protocol, int sv[2]);
sys/types.h文件需要用来定义一些C宏常量。sys/socket.h文件必须包含进来定义socketpair函数原型。
socketpair函数需要四个参数。他们是:
套接口的域
套接口类型
使用的协议
指向存储文件描述符的指针
类型参数声明了我们希望创建哪种类型的套接口。socketpair函数的选择如下:
SOCK_STREAM
SOCK_DGRAM
对于socketpair函数,protocol参数必须提供为0。
参数sv[2]是接收代表两个套接口的整数数组。每一个文件描述符代表一个套接口,并且与另一个并没有区别。
如果函数成功,将会返回0值。否则将会返回-1表明创建失败,并且errno来表明特定的错误号。
关于流程。socketpair()函数创建出两个进程,fork()之后这两个进程都会执行主程序中的代码,这个一定要注意!尤其是bind的时候,如果bind两次的话,那就会出错了。一般会在子进程里调用一个带死循环的函数,这样就好了。
#include <sys/types.h>
#include <sys/socket.h>
int socketpair(int domain, int type, int protocol, int sv[2]);
sys/types.h文件需要用来定义一些C宏常量。sys/socket.h文件必须包含进来定义socketpair函数原型。
socketpair函数需要四个参数。他们是:
套接口的域
套接口类型
使用的协议
指向存储文件描述符的指针
类型参数声明了我们希望创建哪种类型的套接口。socketpair函数的选择如下:
SOCK_STREAM
SOCK_DGRAM
对于socketpair函数,protocol参数必须提供为0。
参数sv[2]是接收代表两个套接口的整数数组。每一个文件描述符代表一个套接口,并且与另一个并没有区别。
如果函数成功,将会返回0值。否则将会返回-1表明创建失败,并且errno来表明特定的错误号。
关于流程。socketpair()函数创建出两个进程,fork()之后这两个进程都会执行主程序中的代码,这个一定要注意!尤其是bind的时候,如果bind两次的话,那就会出错了。一般会在子进程里调用一个带死循环的函数,这样就好了。
新建一对socket
编辑int sockets[2];
if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockets) < 0) {
printf("error %d on socketpair\n", errno);
}
用socketpair实现父子进程双工通信
编辑#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
void err_sys(const char *errmsg);
int main(void)
{
int sockfd[2];
pid_t pid;
if ((socketpair(AF_LOCAL, SOCK_STREAM, 0, sockfd))<0)
err_sys("socketpair");
if ((pid = fork()) == -1)
err_sys("fork");
else if (pid == 0)
{ /* child process */
char s[BUFSIZ];
char s[BUFSIZ];
ssize_t n;
close(sockfd[1]); //write port
close(sockfd[1]); //write port
if ((n = read(sockfd[0], s, sizeof(s))) <0)
err_sys("read error!\n");
printf("read:%s\n",s);
close(sockfd[0]);
exit(0);
}
else if (pid > 0)
{ /* parent process */
char buf[] = "hello china";
ssize_t n;
close(sockfd[0]); //read port
if((n = write(sockfd[1], buf, sizeof(buf)))<0)
err_sys("write error!\n");
close(sockfd[1]);
wait(NULL);
}
}
return 0;
}
void err_sys(const char *errmsg)
{
perror(errmsg);
exit(1);
}
1
0 0
- socketpair
- socketpair
- socketpair
- socketpair
- socketpair
- socketpair
- socketpair
- socketpair
- socketpair
- socketpair
- socketpair
- socketpair用法
- Socketpair 简介
- socketpair理解
- socketpair()函数
- socketpair理解
- socketpair函数
- socketpair理解
- C中文件基本读写操作(单字符,多字符)
- C# dll文件引入运行包exe中。
- leangoo里怎么邀请成员加入看板?
- 不调用C/C++的字符串库函数,请编写函数strcpy
- Linux中启动和停止jar包的运行
- socketpair
- 使用WKWebView替换UIWebView
- 无边框Button(WPF)
- css关于图片处理的相关知识
- KETTLE常见问题和优化
- android camera接口介绍
- 使用maven创建web项目
- C#中DataSet、DataTable、DataRow一些例子
- VMware下Ubuntu与宿主机Win10共享文件