【socketpair函数介绍及使用】

article/2025/9/22 12:56:12

socketpair函数介绍及使用

  • 函数原型
  • 进程间通信
  • 线程间通信

  Linux环境下使用socketpair函数创造一对未命名的、相互连接的UNIX域套接字。
  管道历史上,它们是半双工的(数据只能在一个方向上流动),但是现在也有全双工管道。管道只能在具有共同祖先的两个进程之间使用,通常一个管道由一个进程创建,在进程调用fork之后,这个管道就你能在父进程和子进程之间使用了。

函数原型

#include <sys/types.h>
#include <sys/socket.h>
//socketpair函数
int socketpair(int domain, int type, int protocol, int sv[2]);

参数1(domain):表示协议族,在Linux下只能为AF_LOCAL或者AF_UNIX。(自从Linux 2.6.27后也支持SOCK_NONBLOCK和SOCK_CLOEXEC)
参数2(type):表示协议,可以是SOCK_STREAM或者SOCK_DGRAM。SOCK_STREAM是基于TCP的,而SOCK_DGRAM是基于UDP的
参数3(protocol):表示类型,只能为0
参数4(sv[2]):套节字柄对,该两个句柄作用相同,均能进行读写双向操作
返回结果: 0为创建成功,-1为创建失败,并且errno来表明特定的错误号,具体错误号如下所述:

EAFNOSUPPORT:本机上不支持指定的address。
EFAULT: 地址sv无法指向有效的进程地址空间内。
EMFILE: 已经达到了系统限制文件描述符,或者该进程使用过量的描述符。
EOPNOTSUPP:指定的协议不支持创建套接字对。
EPROTONOSUPPORT:本机不支持指定的协议。

进程间通信

/*socketpair1.c*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <stdio.h>int main ()
{int sv[2];int result = socketpair(AF_UNIX, SOCK_STREAM, 0, sv);if (result < 0){exit(1);}printf("sv[0] is : %d \n", sv[0]);   //这两个套节字句柄并不相同,但作用是一样的printf("sv[1] is : %d \n", sv[1]);if (fork()){ /* 父进程 */int val = 0;pid_t pid = getpid(); close(sv[1]);    //父进程关闭sv[1]的读写权限while (1){          ++val;printf("%d send message: %d\n", pid, val);   write(sv[0], &val, sizeof(val));            //父进程向管道里写数据// read(sv[0], &val, sizeof(val));          //如果字进程不写数据,将会导致此处堵塞//printf("%d receive message: %d\n", pid, val);sleep(1);}}else{  /*子进程*/int val = 0;close(sv[0]); //字进程关闭sv[0]的读写权限pid_t pid = getpid(); while(1){read(sv[1], &val, sizeof(val));            //字进程从管道中取数据printf("%d receive message: %d\n", pid, val);//  printf("%d receive message: %d\n", pid, val); //  write(sv[1], &val, sizeof(val));}}
}

运行结果:
在这里插入图片描述

线程间通信

#include <stdio.h>
#include <sys/types.h>        
#include <sys/socket.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>static void *thread_run_func (void *arg)
{int thread_fd = (int)arg;char thread_buf[50] = {0};int readlen;/* 向主进程发送一个消息 */printf("send to main thread : %s\n", "Hello,main!");write(thread_fd, "Hello,main!", sizeof("Hello,main!"));/* 接收主进程发送的消息 */readlen = read(thread_fd, thread_buf, 50);thread_buf[readlen] = '\0';printf("recv from main thread : %s\n", thread_buf);
}int main(int argc, char *argv[])
{int sockets[2];int result;int bufferSize;pthread_t thread;char main_buf[50]= {0};int readlen;result = socketpair(AF_UNIX, SOCK_SEQPACKET, 0, sockets);if(-1 == result){printf("socketpair error!\n");return -1;}/* 创建一个子线程用于和主线程之间进行双向通讯 */result = pthread_create(&thread, NULL, thread_run_func, (void *)sockets[1]);sleep(1);	/* 延时一段时间让子进程先于主进程运行 *//* 接收子进程发送过来的消息 */readlen = read(sockets[0], main_buf, 50);main_buf[readlen] = '\0';printf("recv from child thread : %s\n", main_buf);/* 发送一个消息给子进程 */printf("send to child thread : %s\n", "Hi,child");write(sockets[0], "Hi,child", sizeof("Hi,child"));sleep(1);return 0;
}

运行结果:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/13n8OELQ.shtml

相关文章

LAMP架构超详细搭建步骤

LAMP介绍&#xff1a; LinuxApacheMysql/MariaDBPerl/PHP/Python一组常用来搭建或者服务器的开源软件&#xff0c;本身都是各自独立的程序&#xff0c;但是因为常被放在一起使用&#xff0c;拥有了越来越高的兼容度&#xff0c;共同组成了一个强大的Web应用程序平台。 目前LA…

LAMP架构介绍

转载自&#xff1a; https://blog.csdn.net/aoli_shuai/article/details/78745984 https://blog.csdn.net/sj349781478/article/details/84224440 一、LAMP介绍&#xff1a; LAMP是 linux Apache MySQL PHP的简写&#xff0c;即把Apache MySQL PHP 安装在linux系统上&#xff…

Lamp架构部署phpmadmin项目

Lamp架构部署phpmadmin项目 文章目录 Lamp架构部署phpmadmin项目官网下载phpmadmin的包测试登陆 官网下载phpmadmin的包 [phpMyAdmin]: 将下载好的包拖入目录里&#xff0c;并解压 [rootlocalhost ~]# cd /usr/src/ [rootlocalhost src]# lsapr-1.6.5 apr-1.6.5.tar.gz a…

【笔记】lamp架构框图

一、lamp架构 (1)、lamp基础结构 (2)、分布式lamp架构 (3)、实际运用 二、OSI七层和TCP/IP五层关系 这部分具体可以参考网址 (1)、OSI七层 OSI&#xff08;Open System Interconnect&#xff09;&#xff0c;即开放式系统互联。 一般都叫OSI参考模型&#xff0c;是ISO&…

LAMP服务架构

LAMP服务架构 文章目录 LAMP服务架构1. LAMP简介2. LAMP工作原理3. 部署LAMP3.1 源码安装http服务3.2 源码安装mysql数据库3.3 源码安装php3.2 apache和php配置 1. LAMP简介 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写 L代表服务器操作系统使用…

LAMP架构部署论坛

搭建论坛&#xff0c;要求为8080端口 安装LAMP 架构所需的服务&#xff0c;部分及插件 yum -y install mariadb mariadb-server mariadb-libs php php-mysql php-gd php-fpm php-cli gd httpd 启动服务&#xff1a;systemctl start httpd mariadb 设置数据库密码&#xff1a…

快速搭建LAMP架构

快速搭建LAMP架构 1.安装apache2.部署mysql3.部署php结合apache4.验证5.部署一个论坛disuz 1.安装apache [rootlocalhost ~]# yum install httpd -y 已加载插件&#xff1a;fastestmirror, langpacks Loading mirror speeds from cached hostfile* base: mirrors.aliyun.com* …

LAMP架构简介与配置

文章目录 前言LAMP 简介与概述LAMP平台概述 构建LAMP平台顺序编译安装的优点各组件的主要作用 编译安装 Apache编译安装mysql安装PHP 前言 LAMP 简介与概述 LAMP平台概述 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整台系统和相关软件&#x…

搭建LAMP架构

搭建LAMP架构 一、LAMP架构概述 1、LAMP简介 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整台系统和相关软件&#xff0c;能够提供动态web站点服务及其应用开发环境。 LAMP是一个缩写词&#xff0c;具体包括Linux操作系统&#xff0c;Apache网…

LAMP架构简介与概述 及服务安装

目录 1、LAMP平台概述 &#xff08;1&#xff09;LAMP平台概述 &#xff08;2&#xff09;构建LAMP平台顺序 &#xff08;3&#xff09;编译安装的优点 &#xff08;4&#xff09;各组件的主要作用 2、Apache概述 &#xff08;1&#xff09; 安装Apache服务&#xff1a;…

什么是LAMP架构?

LAMP架构介绍 LAMP动态网站架构 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。 1、LAMP分别代表什么&#xff1f; L代表服务器操作系统使用Linux A代表网站服务使用的是Apache软件基金会中的httpd软件 M代表网站后台使用的数据库是MySQL数…

【ubuntu】搭建lamp架构

文章目录 一、准备工作1、更新源2、更新软件3、防火墙UFW 二、安装apache21、安装apache包2、网页浏览查看 三、安装mysql1、安装mysql2、查看mysql3、设置mysql数据库的密码 四、安装PHP1、安装php包以及插件2、测试php包 五、安装wordpress1、获取wordpress的压缩包2、上传压…

腾讯云— LAMP 架构个人实践分享

LAMP 环境通常指Linux 环境下&#xff0c;由ApacheMySQL/MariaDBPHP 以及其它相关组件组成的网站服务器架构。目前以LAMP组成的Web 应用程序平台广泛被应用&#xff0c;70%以上的访问流量由LAMP提供&#xff0c;所以我们也认同LAMP是最强大的网站解决方案。 关于LAMP的环境部署…

一:LAMP 架构简介

一&#xff1a;LAMP 架构简介 LAMP 是目前成熟的一种企业网站应用模式之一&#xff0c;指的是协同工作的一套系统和相关软件的整合&#xff0c;可提供PHP动态web站点应用及开发环境&#xff0c;LAMP 经过十年的完善各个组件间的兼容性&#xff0c;协作能力&#xff0c;稳定等方…

php lamp架构,lamp架构搭建

lamp架构搭建(yum) 环境&#xff1a;一台主机&#xff0c;centos7.5 lamp安装 yum -y install httpd php-fpm php-mysql mariadb-server 启动php-fpm服务 systemctl start php-fpm 配置httpd生成配置文件&#xff0c;提示http&#xff0c;php-fpm服务在本地 vim /etc/httpd/con…

LAMP架构介绍及配置

1.LAMP简介与概述 1.1 LAMP平台概述 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整台系统和相关软件&#xff0c;能够提供动态web站点服务及其应用开发环境 LAMP是一个缩写词&#xff0c;具体包括Linux操作系统&#xff0c;Apache网站服务器&a…

lamp

文章目录 1. LAMP架构介绍2. web服务器工作流程2.1 cgi与fastcgi2.2 httpd与php结合的方式2.3 web工作流程 3. lamp平台构建3.1 安装httpd3.2 安装mysql3.3 安装php3.4 配置apache3.4.1 启用代理模块3.4.2 配置虚拟主机 3.5 验证 1. LAMP架构介绍 lamp&#xff0c;其实就是由L…

LAMP架构简介

一、LAMP架构介绍 现如今打开浏览器&#xff0c;搜索LAMP关键词&#xff0c;出现大量的关于LAMP的介绍&#xff0c;包括LAMP的一键脚本、LAMP的yum安装、LAMP的编译安装&#xff0c;但是对于一个非开发或非专业人员有可能根据网络参考资源实现LAMP的搭建并成功运行各种服务&am…

LAMP架构简述

阅读目录 图片架构详解               LAMP架构以及通信过程 LNMP架构优缺点Nginx/APACHE tomcat MySQL 图片架构详解               LAMP/LNMP&#xff1a;是有Linux系统&#xff0c;Apache网络服务器或者Nginx服务器&#xff0c;MySQL数据库…

LAMP架构

目录 一、LAMP简介与概述1.LAMP平台概述2.构建LAMP平台顺序3.编译安装的优点4.各组件的主要作用 二.安装1.-安装Apache2.安装MYSQL3.安装PHP4.安装论坛5.论坛测试 一、LAMP简介与概述 1.LAMP平台概述 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一…