当前位置: 首页 > news >正文

Linux学习——Linux进程间通信(IPC)聊天程序实践

Linux学习——Linux进程间通信(IPC)聊天程序实践

一、在阿里云服务器上使用talk程序

Linux系统自带的talk命令可以让两个登录用户进行实时文字聊天:

  1. 用户A执行:talk usernameB
  2. 用户B会收到通知,并需要执行: talk usernameA@hostname
  3. 然后双方就可以开始聊天了,屏幕会分成上下两部分
  4. image-20250420181514161

image-20250420181343202

二、用C语言实现简单的进程间的通信聊天程序

1.使用命令管理(FIFO)

server.c(服务器端)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stddef.h>  // 添加 size_t 的定义#define FIFO_FILE "chat_fifo"int main() {int fd;char readbuf[80];char end[10];int to_end;// 创建命名管道mkfifo(FIFO_FILE, 0666);while(1) {fd = open(FIFO_FILE, O_RDONLY);read(fd, readbuf, sizeof(readbuf));printf("Client: %s\n", readbuf);close(fd);printf("Server: ");fgets(readbuf, sizeof(readbuf), stdin);strcpy(end, "quit\n");to_end = strcmp(readbuf, end);if (to_end == 0) {fd = open(FIFO_FILE, O_WRONLY);write(fd, readbuf, strlen(readbuf));close(fd);break;}fd = open(FIFO_FILE, O_WRONLY);write(fd, readbuf, strlen(readbuf));close(fd);}unlink(FIFO_FILE);  // 删除FIFO文件return 0;
}

client.c(客户端)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stddef.h>  // 添加 size_t 的定义#define FIFO_FILE "chat_fifo"int main() {int fd;char readbuf[80];char end[10];int to_end;while(1) {printf("Client: ");fgets(readbuf, sizeof(readbuf), stdin);strcpy(end, "quit\n");to_end = strcmp(readbuf, end);fd = open(FIFO_FILE, O_WRONLY);write(fd, readbuf, strlen(readbuf));close(fd);if (to_end == 0) {break;}fd = open(FIFO_FILE, O_RDONLY);read(fd, readbuf, sizeof(readbuf));printf("Server: %s\n", readbuf);close(fd);}return 0;
}

2.编译和运行

  • 编译
gcc server.c -o server
gcc client.c -o client
  • 在两个不同的终端分别运行
./server
./client

2.编译和运行

  • 编译
gcc server.c -o server
gcc client.c -o client
  • 在两个不同的终端分别运行
./server
./client

image-20250420124240561

相关文章:

Linux学习——Linux进程间通信(IPC)聊天程序实践

Linux学习——Linux进程间通信&#xff08;IPC&#xff09;聊天程序实践 一、在阿里云服务器上使用talk程序 Linux系统自带的talk命令可以让两个登录用户进行实时文字聊天&#xff1a; 用户A执行&#xff1a;talk usernameB用户B会收到通知&#xff0c;并需要执行&#xff1…...

PCA 降维实战:从原理到电信客户流失数据应用

一、简介 在机器学习领域&#xff0c;数据的特征维度往往较高&#xff0c;这不仅会增加计算的复杂度&#xff0c;还可能导致过拟合等问题。主成分分析&#xff08;Principal Component Analysis&#xff0c;简称 PCA&#xff09;作为一种经典的降维技术&#xff0c;能够在保留数…...

即插即用模块(1) -MAFM特征融合

(即插即用模块-特征处理部分) 一、(2024) MAFM&MCM 特征融合特征解码 paper&#xff1a;MAGNet: Multi-scale Awareness and Global fusion Network for RGB-D salient object detection 1. 多尺度感知融合模块 (MAFM) 多尺度感知融合模块 (MAFM) 旨在高效融合 RGB 和深度…...

Linux学习——TCP

一.TCP编程API 1.socket函数 1.socket函数 include include int socket(int domain,int type,int protocol); 参数 domain AF_INET AF_INET6 AF_UNIX,AF_LOCAL AF_NETLINK AF_PACKET type SOCK_STREAM: 流式…...

Kubernetes控制平面组件:调度器Scheduler(二)

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

数据通信学习笔记之OSPF其他内容2

OSPF 与 BFD 联动 网络上的链路故障或拓扑变化都会导致设备重新进行路由计算&#xff0c;所以缩短路由协议的收敛时间对于提高网络的性能是非常重要的。 OSPF 与 BFD 联动就是将 BFD 和 OSPF 关联起来&#xff0c;一旦与邻居之间的链路出现故障&#xff0c;BFD 对完品以&…...

数据通信学习笔记之OSPF的区域

OSPFArea 用于标识一个 OSPF 的区域 区域是从逻辑上将设备划分为不同的组&#xff0c;每个组用区域号 (Area ID)来标识 OSPF 的区域 ID 是一个 32bit 的非负整数&#xff0c;按点分十进制的形式(与 IPV4 地址的格式一样)呈现&#xff0c;例如 Area0.0.0.1。 为了简便起见&#…...

css3新特性第四章(渐变)

渐变 线性渐变 径向渐变 重复渐变 使用&#xff1a; background-image: xx 渐变 background-image: linear-gradient(red,yellow,green); 公共代码 .box {width: 300px;height: 200px;border: 1px solid black;float: left;margin-left: 30px;margin-top: 30px;text-align:…...

玩机搞机基本常识-------小米OLED屏幕机型怎么设置为永不休眠_手机不息屏_保持亮屏功能 拒绝“烧屏” ?

前面在帮一位粉丝解决小米OLED机型在设置----锁屏下没有永不休眠的问题。在这里&#xff0c;大家要明白为什么有些小米机型有这个设置有的没有的原因。区分OLED 屏幕和 LCD屏幕的不同。从根本上拒绝烧屏问题。 OLED 屏幕的一些优缺点&#x1f49d;&#x1f49d;&#x1f49d; …...

深拷贝和浅拷贝的区别

浅拷贝&#xff1a; 只复制原对象的基本数据类型字段&#xff0c;拥有相对独立的副本数据&#xff0c;修改时不会影响到原对象的字段值。对于原对象的引用数据类型字段&#xff0c;直接共享原对象字段的引用&#xff0c;修改自己的字段时会同时影响原对象。 深拷贝&#xff1a…...

RabbitMQ和Seata冲突吗?Seata与Spring中的事务管理冲突吗

1. GlobalTransactional 和 Transactional 是否冲突&#xff1f; 答&#xff1a;不冲突&#xff0c;它们可以协同工作&#xff0c;但作用域不同。 Transactional: 这是 Spring 提供的注解&#xff0c;用于管理单个数据源内的本地事务。在你当前的 register 方法中&#xff0c…...

[安全实战]逆向工程核心名词详解

逆向工程核心名词详解 一、调试与执行类 1. 断点&#xff08;Breakpoint&#xff09; 定义&#xff1a;在代码中设置标记&#xff0c;使程序执行到此处时暂停类型&#xff1a; 普通断点&#xff1a;通过INT3指令实现条件断点&#xff1a;满足特定条件时触发内存断点&#xf…...

用键盘实现控制小球上下移动——java的事件控制

本文分享Java的一个有趣小项目&#xff0c;实现用键盘控制小球的移动 涉及java知识点&#xff1a;Swing GUI框架&#xff0c;绘图机制&#xff0c;事件处理&#xff0c;焦点控制 1.编写窗口和面板 (1.)定义面板类 Panel 继承自Java 自带类JPanel (2.)定义窗口类 window 继承…...

AutoSAR从概念到实践系列之MCAL篇(二)——Mcu模块配置及代码详解(上)

欢迎大家学习我的《AutoSAR从概念到实践系列之MCAL篇》系列课程,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢各位的支持! 根据上一篇内容中…...

BEVDet: High-Performance Multi-Camera 3D Object Detection in Bird-Eye-View

背景 在自动驾驶场景下&#xff0c;以往工作是目标检测任务用图像视角做&#xff0c;语义分割用BEV视角做。本文提出了BEVDet&#xff0c;实现了一个统一的框架&#xff0c;它模块化设计分为图像编码器&#xff0c;视角转换器&#xff0c;BEV编码器以及BEV空间的3D检测头。然而…...

高效获取淘宝实时商品数据:API 接口开发与数据采集实战指南

在电商行业竞争白热化的当下&#xff0c;实时且准确的商品数据是企业制定营销策略、优化产品布局的重要依据。淘宝作为国内头部电商平台&#xff0c;其海量的商品数据蕴含着巨大价值。通过 API 接口高效获取淘宝实时商品数据&#xff0c;成为电商从业者和开发者的必备技能。本文…...

kotlin知识体系(六) : Flow核心概念与与操作符指南

1. Flow基础概念 1.1 冷流&#xff08;Cold Stream&#xff09; 冷流是Flow的默认形式&#xff0c;其核心特点如下&#xff1a; • 按需触发&#xff1a;仅在消费者调用 collect 时开始发射数据&#xff0c;且每次收集都会重新执行流的逻辑&#xff08;类似“单播”&#xff0…...

【CentOs】构建云服务器部署环境

(一) 服务器采购 2 CPU4G 内存40G 系统盘 80G 数据盘 (二) 服务器安全组和端口配置 (三) 磁盘挂载 1 登录 root 2 查看目前磁盘使用情况 df -h 3 查看磁盘挂载情况 识别哪些磁盘没挂载 fdisk -l 4 对未挂载磁盘做分区 fdisk /dev/vdb 输入m&#xff0…...

【AI论文】对人工智能生成文本的稳健和细粒度检测

摘要&#xff1a;机器生成内容的理想检测系统应该能够在任何生成器上很好地工作&#xff0c;因为越来越多的高级LLM每天都在出现。 现有的系统往往难以准确识别人工智能生成的短文本内容。 此外&#xff0c;并非所有文本都完全由人类或LLM创作&#xff0c;因此我们更关注部分案…...

MyFamilyTree:专业家谱族谱制作工具

MyFamilyTree 是一款专业级家谱族谱制作工具&#xff0c;支持 Windows 7 至 11 系统&#xff08;含服务器版本&#xff09;‌。该软件以直观的拖拽式操作为核心&#xff0c;支持构建多维家族树结构&#xff0c;并提供丰富的多媒体集成功能&#xff0c;便于用户记录家族成员的生…...

【统计分析120】统计分析120题分享

1-30 判断题 数学模型 指的是通过抽象、简化现实世界的某些现象&#xff0c;利用数学语言来描述他们的结构和行为&#xff0c;做出一些必要的假设&#xff0c;运用适当的数学工具&#xff0c;得到一个数学结论 数学模型&#xff1a;指的是通过抽象、简化现实世界的某些现象&am…...

【Windows10下PP-OCRv4部署指南‌】

Windows10下PP-OCRv4部署指南‌ 一、环境准备‌ 安装Visual Studio 2022‌ 下载并安装 ‌C桌面开发组件‌&#xff0c;确保支持MSVC编译环境‌。 配置系统环境变量&#xff0c;确保cl.exe等编译工具可用。 Python环境配置‌ 推荐使用Conda创建虚拟环境&#xff1a; bash Co…...

Matlab PID参数整定和设计

1、内容简介 Matlab 206-PID参数整定和设计 可以交流、咨询、答疑 2、内容说明 略 某流量控制系统整定方法仿真&#xff08;3&#xff09; 摘 要&#xff1a;本次设计针对一个给定的流量控制系统进行仿真&#xff0c;已经确认该系统为简单控制系统&#xff0c;并且控制策略…...

【Linux系统】Linux基础指令(详解Linux命令行常用指令,每一个指令都有示例演示)

文章目录 一、与文件路径相关的指令0.补充知识&#xff1a;路径的认识1.pwd 指令2.cd 指令&#xff08;含家目录的介绍&#xff09; 二、创建和删除文件的指令0.补充知识&#xff1a;普通文件和目录文件1.touch 指令&#xff08;可以修改文件的时间戳&#xff09;2.mkdir 指令3…...

LLM基础-什么是Token?

LLM基础-什么是Token&#xff1f; 概述 Token 是大语言模型&#xff08;LLM, Large Language Model&#xff09;中最基本的输入单元&#xff0c;它是语言被模型“理解”的方式。不同于人类可以直接看懂一段自然语言文本&#xff0c;LLM 只能处理数字&#xff0c;而这些数字就…...

Few-shot medical image segmentation with high-fidelity prototypes 论文总结

题目&#xff1a;Few-shot medical image segmentation with high-fidelity prototypes&#xff08;高精确原型&#xff09; 论文&#xff1a;Few-shot medical image segmentation with high-fidelity prototypes - ScienceDirect 源码&#xff1a;https://github.com/tntek/D…...

大模型之路(day 1)

这段时间以来&#xff0c;全身心的投入了研究大模型&#xff0c;虽然还是入门&#xff0c;但比之前已经好了非常多了&#xff0c;不得不说&#xff0c;计算机的学习特别需要强大的自驱力和耐心&#xff0c;以及检索能力。知乎确实在这些知识的分享上做的比csdn好太多了 万事开…...

996引擎-拓展变量:物品变量

996引擎-拓展变量:物品变量 测试代码参考资料对于Lua来说,只有能保存数据库的变量才有意义。 至于临时变量,不像TXT那么束手束脚,通常使用Lua变量就能完成。 测试代码 -- 存:物品拓展strfunction (player)local where =...

集合框架(重点)

1. 什么是集合框架 List有序插入对象&#xff0c;对象可重复 Set无序插入对象&#xff0c;对象不可重复&#xff08;重复对象插入只会算一个&#xff09; Map无序插入键值对象&#xff0c;键只唯一&#xff0c;值可多样 &#xff08;这里的有序无序指的是下标&#xff0c;可…...

IDEA在Git提交时添加.ignore忽略文件,解决为什么Git中有时候使用.gitignore也无法忽略一些文件

文章目录 一、为什么需要.gitignore文件&#xff1f;二、如何在IntelliJ IDEA中高效管理.gitignore文件&#xff1f;1:先下载这个.ignore插件2. 创建或编辑.gitignore文件3. 使用IDEA内置模板快速生成忽略规则4. 实时预览忽略效果5. 检查忽略规则是否生效6.但是一般我们更多时候…...

如何将自己封装的组件发布到npm上:详细教程

如何将自己封装的组件发布到npm上&#xff1a;详细教程 作为前端开发者&#xff0c;我们经常从npm&#xff08;Node Package Manager&#xff09;上下载并使用各种第三方库和组件。然而&#xff0c;有时候我们可能会发现自己需要的功能在npm上并不存在&#xff0c;或者我们希望…...

位运算,状态压缩dp(算法竞赛进阶指南学习笔记)

目录 移位运算一些位运算的操作最短 Hamilton 路径&#xff08;状态压缩dp模板&#xff0c;位运算&#xff09; 0x是十六进制常数的开头&#xff1b;本身是声明进制&#xff0c;后面是对应具体的数&#xff1b; 数组初始化最大值时用0x3f赋值&#xff1b; 移位运算 左移 把二…...

node.js|环境部署|源码编译高版本的node.js

一、 前言 本文就如何二进制部署和源码编译安装部署node.js环境做一个简单的介绍 node的版本大体是以18版本为界限&#xff0c;也就是说18版本之前对glibc版本没有要求&#xff0c;其后的版本都对glibc版本有要求&#xff0c;node的版本越高&#xff0c;glibc需要的版本也越…...

通信安全员ABC证的考试内容包括哪些?

通信安全员 ABC 证的考试内容整体上围绕通信安全相关的法律法规、安全技术、安全管理等方面展开&#xff0c;但在具体侧重点上有所不同&#xff0c;以下是详细介绍&#xff1a; 通信安全基础知识 通信原理&#xff1a;包含模拟通信和数字通信的基本原理&#xff0c;如调制、解…...

Oracle--SQL基本语法

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 1、SQL语句介绍 在Oracle开发中&#xff0c;客户端把SQL语句发送给服务器&#xff0c;服务器对SQL语句进行编译、执行&#xff0c;把执行的结果返回给…...

windows服务器及网络:论如何安装(虚拟机)

今天我要介绍的是&#xff1a;在Windows中对于安装系统&#xff08;虚拟机的步骤以及相关的安装事宜&#xff09;&#xff0c;事不宜迟&#xff0c;让我们来看看系统安装&#xff08;虚拟机&#xff09;是怎么操作的&#xff1a; 对现在来说&#xff0c;安装电脑系统已经是非常…...

【网络篇】从零写UDP客户端/服务器:回显程序源码解析

大家好呀 我是浪前 今天讲解的是网络篇的第四章&#xff1a;从零写UDP客户端/服务器&#xff1a;回显程序源码解析 从零写UDP客户端/服务器&#xff1a;回显程序源码解析 UDP 协议特性​核心类介绍​ UDP的socket应该如何使用&#xff1a;1: DatagramSocket2: DatagramPacket回…...

学习笔记:黑马程序员JavaWeb开发教程(2025.3.23)

11.2 案例-文件上传-简介 文件上传的前端页面的代码需要放到springboot项目的static里面&#xff0c;也就是resource文件夹下面的static文件夹里面 服务端接收前端上传的数据&#xff0c;再服务端定义一个controller来接收数据&#xff0c;再controller中定义一个…...

提示词构成要素对大语言模型跨模态内容生成质量的影响

提示词构成要素对大语言模型跨模态内容生成质量的影响 提示词清晰度、具象性与质量正相关 限定指向性要素优于引导指向性要素 大语言模型生成内容保真度偏差 以讯飞星火大模型为实验平台,选取100名具备技术素养的人员,从提示词分类、构成要素和实践原则归纳出7种提示词组…...

浅聊docker的联合文件系统

前言&#xff1a; 在我们pull镜像的时候&#xff0c;就会发现一个神奇的地方&#xff0c;在将镜像pull到本地的时候它是分层下载的&#xff0c;如下图: 这时候我就有一个疑问&#xff0c;为什么是分层下载的&#xff1f;怎么和我们平时下载软件的时候不一样呢&#xff1f; 联…...

计算机视觉cv入门之Haarcascade的基本使用方法(人脸识别为例)

Haar CascadeXML特征分类器&#xff0c;是一种基于机器学习的方法&#xff0c;它利用了积分图像(或总面积)的概念有效地提取特征(例如&#xff0c;边缘、线条等)的数值。“级联分类器”即意味着不是一次就为图像中的许多特征应用数百个分类器&#xff0c;而是一对一地应用分类器…...

【NLP 62、实践 ⑮、基于RAG + 智谱语言模型的Dota2英雄故事与技能介绍系统】

羁绊由我而起&#xff0c;痛苦也由我承担 —— 25.4.14 英雄介绍文件&#xff1a; 通过网盘分享的文件&#xff1a;RAG 智谱语言模型的Dota2英雄故事与技能介绍系统 链接: https://pan.baidu.com/s/1G7Xo5TRvFl2BzUnE0NFaBA?pwd4d4j 提取码: 4d4j --来自百度网盘超级会员v3的…...

Keil MDK 编译问题:function “HAL_IncTick“ declared implicitly

问题与处理策略 问题描述 ..\..\User\stm32f1xx_it.c(141): warning: #223-D: function "HAL_IncTick" declared implicitlyHAL_IncTick(); ..\..\User\stm32f1xx_it.c: 1 warning, 0 errors问题原因 在 stm32f1xx_it.c 文件中调用了 HAL_IncTick()&#xff0c;但…...

OpenCV基础01-图像文件的读取与保存

介绍: OpenCV是 Open Souce C omputer V sion Library的简称。要使用OpenCV需要安装OpenCV包&#xff0c;使用前需要导入OpenCV模块 安装 命令 pip install opencv-python 导入 模块 import cv2 1. 图像的读取 import cv2 img cv2.imread(path, flag)这里的flag 是可选参数&…...

IP数据报

IP数据报组成 IP数据报&#xff08;IP Datagram&#xff09;是网络中传输数据的基本单位。 IP数据报头部 版本&#xff08;Version&#xff09; 4bit 告诉我们使用的是哪种IP协议。IPv4版本是“4”&#xff0c;IPv6版本是“6”。 头部长度&#xff08;IHL&#xff0c;Intern…...

视频联网平台与AI识别技术在电力行业的创新应用

一、电力行业智能化转型的迫切需求 在能源革命与数字化转型的双重推动下&#xff0c;电力行业正面临着前所未有的智能化升级需求。随着特高压电网的大规模建设和新能源占比的不断提高&#xff0c;传统的电力运维管理模式已经难以满足现代电网安全、高效运行的要求。据统计&…...

Apache Parquet 文件组织结构

简要概述 Apache Parquet 是一个开源、列式存储文件格式&#xff0c;最初由 Twitter 与 Cloudera 联合开发&#xff0c;旨在提供高效的压缩与编码方案以支持大规模复杂数据的快速分析与处理。Parquet 文件采用分离式元数据设计 —— 在数据写入完成后&#xff0c;再追加文件级…...

深度学习方向急出成果,是先广泛调研还是边做实验边优化?

目录 有限资源下本科生快速发表深度学习顶会论文的实战策略 1.短周期内可出成果的研究路径 2.论文阅读与复现的优先顺序 3.无一对一指导时的调研与实验组织 4.成功案例&#xff1a;本科生顶会论文经验 5.快速上手的研究子方向推荐 大家好这里是AIWritePaper官方账号&…...

Python 深度学习实战 第11章 自然语言处理(NLP)实例

Python 深度学习实战 第11章 自然语言处理(NLP)实例 内容概要 第11章深入探讨了自然语言处理&#xff08;NLP&#xff09;的深度学习应用&#xff0c;涵盖了从文本预处理到序列到序列学习的多种技术。本章通过IMDB电影评论情感分类和英西翻译任务&#xff0c;详细介绍了如何使…...

9、Hooks:现代魔法咒语集——React 19 核心Hooks

一、魔法咒语的本质革新 "类组件如同古老的魔杖挥舞仪式&#xff0c;而Hooks是新时代的无杖施法&#xff01;"霍格沃茨魔法研究院的魔杖动力学教授惊叹道。React Hooks通过函数式能量场重构了魔法运作模式&#xff0c;让组件能量流转如尼可勒梅的炼金术。 ——以《国…...