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 源程序清单 四、 结论五、 文章目录 概要 本论文重点通过对射频技术…...
Qwen3-32B部署全攻略:3步搞定,零基础也能快速上手
Qwen3-32B部署全攻略:3步搞定,零基础也能快速上手 1. 为什么选择Qwen3-32B? Qwen3-32B是当前开源大模型领域的佼佼者,拥有320亿参数的强大能力。与市面上其他模型相比,它有三个突出优势: 推理能力卓越&a…...
告别多应用切换:Chrome QRCode让二维码处理效率提升300%
告别多应用切换:Chrome QRCode让二维码处理效率提升300% 【免费下载链接】chrome-qrcode chrome-qrcode - 一个 Chrome 浏览器插件,可以生成当前 URL 或选中文本的二维码,或解码网页上的二维码。 项目地址: https://gitcode.com/gh_mirrors…...
Awesome Rust核心库精选:异步编程与网络开发
Awesome Rust核心库精选:异步编程与网络开发 本文深入探讨了Rust生态系统中的核心库,重点分析了异步运行时(Tokio与async-std)、网络编程库、HTTP客户端/服务器框架、数据序列化工具链以及密码学与安全相关库。通过对比分析各库的…...
tealdeer与其他tldr客户端的终极对比分析:哪个更适合你的命令行工作流?
tealdeer与其他tldr客户端的终极对比分析:哪个更适合你的命令行工作流? 【免费下载链接】tealdeer A very fast implementation of tldr in Rust. 项目地址: https://gitcode.com/gh_mirrors/te/tealdeer tealdeer是一款用Rust开发的tldr客户端&a…...
新手零代码入门:用快马ai一键生成vmware虚拟机图文安装教程
新手零代码入门:用快马AI一键生成VMware虚拟机图文安装教程 最近在学网络安全和Linux系统,第一步就是要搭建虚拟机环境。作为完全没接触过虚拟化技术的小白,我原本以为安装VMware会很复杂,结果发现用InsCode(快马)平台的AI功能&a…...
SMUDebugTool终极指南:如何深度调试AMD Ryzen处理器底层硬件
SMUDebugTool终极指南:如何深度调试AMD Ryzen处理器底层硬件 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...
史上最快破 10 万 Star!Claude Code Python 重写版震撼上线!
文章目录 📖 介绍 📖 🏡 演示环境 🏡 📒 史上最快10万Star项目 📒 📝 事件始末 🔧 项目架构 🗂️ 目录结构 ⭐ Rust工作区模块 🚀 快速开始 📦 Python版 🦀 Rust版 💡 核心特色 🎯 清洁室重写 🔄 AI辅助开发 📊 Rust性能优化 🌟 项目影响力 …...
Pixel Language Portal实战教程:使用WebSockets实现低延迟流式翻译响应
Pixel Language Portal实战教程:使用WebSockets实现低延迟流式翻译响应 1. 引言:当翻译遇上像素冒险 想象你正在玩一款16-bit像素风RPG游戏,每次对话选择都会触发实时翻译效果,文字像能量块一样在屏幕上流动。这正是Pixel Langu…...
从RGB合并到多传感器融合:深入拆解AXI4-Stream Combiner IP在Zynq平台上的两种典型应用
从RGB合并到多传感器融合:深入拆解AXI4-Stream Combiner IP在Zynq平台上的两种典型应用 在FPGA开发中,数据流的高效处理一直是工程师面临的核心挑战之一。当系统需要同时处理多个并行数据源时,如何将这些数据流有序、高效地合并为单一数据流…...
3dsconv终极指南:一键将3DS游戏转换为CIA格式的完整教程
3dsconv终极指南:一键将3DS游戏转换为CIA格式的完整教程 【免费下载链接】3dsconv Python script to convert Nintendo 3DS CCI (".cci", ".3ds") files to the CIA format 项目地址: https://gitcode.com/gh_mirrors/3d/3dsconv 你是否…...
