UNIX 域协议(本地通信协议)
概述
#define UNIX_PATH_MAX 108
struct sockaddr_un
{__kernel_sa_family_t sun_family; /* 通信协议 AF_UNIX / AF_LOCAL */char sun_path[UNIX_PATH_MAX]; /* pathname *///UNIX 域协议的地址,是以'\0'结束的本地文件系统中的绝对路径名//会自动的创建不需要提前创建
}; UNIX 域协议之进程间通信方式一:socketpair 函数
#include <sys/types.h>
#include <sys/socket.h> int socketpair(int domain, int type, int protocol, int sv[2]); /*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));}}
} UNIX 域协议之进程间通信方式二:套接字通信方式
#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <sys/un.h>
#include <arpa/inet.h>
#include<netinet/in.h> //为了使用 IPV4 地址结构体
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>#define UNIX_PATH_PS "/home/china/sockp1" //连接的套接字地址
#define UNIX_PATH_PC "/home/china/sockp2" //绑定的套接字地址int main(int argc,char *argv[])
{system("rm /home/china/sockp2"); //防止文件重名//1.创建一个套接字int sockfd = socket(AF_UNIX, SOCK_STREAM,0); //创建一个本地通信 UNIX 流式套接字if(-1 == sockfd){perror("create socket failed");exit(-1);}//2.绑定一个通信地址(让服务器能看到我),可不绑定struct sockaddr_un local; memset(&local,0,sizeof(struct sockaddr_un)); //清空结构体local.sun_family = AF_UNIX;strcpy(local.sun_path,UNIX_PATH_PC);int ret = bind(sockfd,(struct sockaddr*)&local,sizeof(local));if(ret == -1){perror("bind error");exit(-1);}printf("bind success\n");//连接目标服务器struct sockaddr_un saddr; //保存目标服务器的地址(本地的文件名)memset(&saddr,0,sizeof(struct sockaddr_un)); //清空结构体saddr.sun_family = AF_UNIX;strcpy(saddr.sun_path,UNIX_PATH_PS);ret = connect(sockfd, (struct sockaddr*)&saddr,sizeof(saddr)); //请求连接目标服务器if(ret == -1){perror("connect error");exit(-1);}printf("connect success\n");char buf[1024] = {0};//读取信息ret = recv(sockfd,buf,1024, 0);if(ret == -1){perror("recv error");}printf("recv size:%d,recv data:%s\n",ret,buf);//发送信息ret = sendto(sockfd,"byebye",6,0,NULL,0);if(ret == -1){perror("sendto error");}printf("sendto size:%d\n",ret);//关闭套接字shutdown(sockfd,SHUT_RDWR);close(sockfd);return 0;
} #include<stdio.h>
#include<stdlib.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <sys/un.h>
#include <arpa/inet.h>
#include<netinet/in.h> //为了使用 IPV4 地址结构体
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#define UNIX_PATH_PS "/home/china/sockp1"int main(int argc,char *argv[])
{system("rm /home/china/sockp1"); //保证该文件没有被使用//1.创建一个套接字int sockfd = socket(AF_UNIX, SOCK_STREAM,0); //创建一个本地通信UNIX 流式套接字if(-1 == sockfd){perror("create socket failed");exit(-1);}//2.绑定一个通信地址(作为服务器本身的地址)struct sockaddr_un local; //保存服务器的地址(文件名)memset(&local,0,sizeof(struct sockaddr_un)); //清空结构体local.sun_family = AF_UNIX;strcpy(local.sun_path,UNIX_PATH_PS);int ret = bind(sockfd,(struct sockaddr*)&local,sizeof(local)); //绑定服务器的地址if(ret == -1){perror("bind error");exit(-1);}printf("bind success\n");//3.开启对一个套接字的监听listen(sockfd,250);//4.等待客户端的连接while(1){struct sockaddr_un caddr; //保存客户端的地址(文件名)socklen_t len = sizeof(caddr);int confd = accept(sockfd,(struct sockaddr*)&caddr,&len); //阻塞等待客户端连接if(confd > 0) //客户端连接成功,返回一个连接套接字专门用来和客户端通信{//一个客户端连接成功.开一个进程/线程去处理这个连接printf("client path:%s\n",caddr.sun_path);ret = sendto(confd,"nishiliangzaima?",20,0,NULL,0); //发送消息if(ret == -1){perror("sendto error");}char buf[1024] = {0};ret = read(confd,buf,1024); //接收消息if(ret <= 0){perror("recv error");}printf("recv size:%d,recv data:%s\n",ret,buf);close(confd);//关闭连接套接字}}//关闭套接字shutdown(sockfd,SHUT_RDWR);close(sockfd);return 0;
} 相关文章:
UNIX 域协议(本地通信协议)
概述 Unix 域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务通信的一种方式。是进程间通信(IPC)的一种方式。 它提供了两类套接字:字节流套接字 SOCK_STREAM(有点像 TCP)和数据报套接字 SOCK_…...
分类预测 | MATLAB实现SSA-CNN-BiGRU-Attention数据分类预测(SE注意力机制)
分类预测 | MATLAB实现SSA-CNN-BiGRU-Attention数据分类预测(SE注意力机制) 目录 分类预测 | MATLAB实现SSA-CNN-BiGRU-Attention数据分类预测(SE注意力机制)分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLA…...
基于FPGA的图像PSNR质量评估计算实现,包含testbench和MATLAB辅助验证程序
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 设置较大的干扰,PSNR15。 设置较小的干扰,PSNR25。 2.算法运行软件版本 matlab2022a vivado2019.2 3.部分核心程序 ti…...
算法进修Day-38
算法进修Day-38 77. 组合 难度:中等 题目要求: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 示例1 输入:n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例2 输入&#…...
8.MySQL内外连接
个人主页:Lei宝啊 愿所有美好如期而遇 目录 表的内连和外连 内连接 外连接 左外连接 右外连接 我们进行演示的表结构是这样的: 表的内连和外连 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的…...
使用.NET设计一个Epub电子书生成工具
1. 背景 可能我们接触到更多的小说文件都是普普通通的TXT格式,用于分享的文档更多的是PDF。TXT虽然轻巧,但是不如PDF丰富和强大。而 Epub 电子书格式因为其丰富的展示效果和较小的文件大小,这样一个微妙的平衡就刚刚好。作为一个喜欢看小说的…...
2023-10-26 用C语言实现一个大整数加法
点击 <C 语言编程核心突破> 快速C语言入门 用C语言实现一个大整数加法 前言一、思路和代码设计数字对齐:字符对齐: 二、代码总结 前言 要解决问题: 实现大整数加法 想到的思路: 用字符代替数字, 逐个计算, 过10进位. 其它的补充: 同样思路可以解决减法, 乘法, 但除法…...
[hive] 窗口函数 ROW_NUMBER()
文章目录 ROW_NUMBER() 示例窗口函数 ROW_NUMBER() 在 Hive SQL 中,ROW_NUMBER()是一个用于生成行号的窗口函数。 它可以为查询结果集中的每一行分配一个唯一的行号。 以下是 ROW_NUMBER() 函数的基本语法: ROW_NUMBER() OVER (PARTITION BY column…...
TensorFlow和Pytorch两种机器学习框架的比较及优缺点
TensorFlow是一个开源的机器学习框架,由Google开发并发布,它被用来构建各种类型的机器学习模型,例如图像识别、语音识别、自然语言处理等。TensorFlow主要有以下几个基本概念: Tensor:TensorFlow中最基本的数据结构&am…...
“Can‘t open workbook - unsupported file type: XML“
java开发,增删改查,涉及到导入excel时,有的excel导入失败提示"Cant open workbook - unsupported file type: XML"。着急赶工期,告诉客户先把excel另存为xls格式,再重新导入。现在有点空余时间,好…...
达芬奇MacOS最新中文版 DaVinci Resolve Studio 18中文注册秘钥
DaVinci Resolve Studio 18是一款专业的视频编辑软件,它具有多种强大的功能。首先,它提供了丰富的视频剪辑工具,如剪切、复制、粘贴、剪辑、缩放和移动等,使用户可以轻松地剪辑和组合视频素材。其次,该软件还支持多个轨…...
电脑扬声器未插入?4个方法帮你恢复声音!
“太奇怪了吧,我的电脑扬声器一直显示未插入,我使用电脑的时候也是一直都没有声音。这是为什么呢?我应该怎么解决这个问题呀?” 我们使用电脑播放音频或视频时,都需要用到电脑扬声器。如果扬声器无法播放声音ÿ…...
Python - 通过/SSH 获取远程主机的 env 变量
Python - 通过/SSH 使用远程主机的 env 变量 - IT工具网 (coder.work) ssh.exec_command(. .profile ; cd /home/test/;$run ./test.sh)ssh.exec_command(. .profile ; cd /home/test/;echo $run )...
ubuntu 下的 使用anaconda 环境运行python 项目
pycharm部署django项目到云服务器的详细流程_编程网 anaconda 安装环境 Ubuntu安装Anaconda详细步骤(Ubuntu22.04.1,Anaconda3-2023.03)-CSDN博客 ubuntu下Anaconda安装与使用教程_ubuntu 运行anaconda_fakerth的博客-CSDN博客 Anaconda教…...
MySQL创建定时任务定时执行sql
#删除定时任务 DROP EVENT IF EXISTS user_event ; -- 创建名字为user_event的事件 CREATE EVENT user_event ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR) -- 每隔一天执行一次,开始执行时间为明天凌晨1点整 …...
如何用MFI确定波浪理论第一浪,anzo capital实操演示
通过上文投资者学会了如何确定波浪理论第一浪,但在后台有投资者咨询 :如何用MFI确定波浪理论第一浪,anzo capital昂首资本秉承着有求必应的态度,今天实操进行演示。 在图中,发散用蓝色标注,收敛用绿色。价…...
vscode推送gitee方法
有一套uni-app代码需要修改,版本控制使用vscode的git功能,远程库在gitee上。 1、设置vscode中git.exe路径 由于git使用了绿色便携版(PortableGit-2.42.0.2-64-bit.7z.exe),vscode未识别到git安装路径,需要…...
R语言与作物模型(以DSSAT模型为例)融合应用
随着基于过程的作物生长模型(Process-based Crop Growth Simulation Model)的发展,R语言在作物生长模型和数据分析、挖掘和可视化中发挥着越来越重要的作用。想要成为一名优秀的作物模型使用者与科研团队不可或缺的人才,除了掌握对…...
MFC Windows 程序设计[336]之历史记录编辑框(附源码)
MFC Windows 程序设计[336]之历史记录编辑框 程序之美前言主体运行效果核心代码逻辑分析结束语程序之美 前言 MFC是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Wi…...
基于单片机的IC卡门禁系统设计
收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、主要研究内容及总体设计方案1.1 系统方案设计1.2系统工作原理 二、硬件设计2.1 主控电路 三、软件设计3.2主程序设计实物附录1 原理图附录2 源程序清单 四、 结论五、 文章目录 概要 本论文重点通过对射频技术…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...
