使用命名管道实现单机双人聊天

【信息科学与工程学】【运营科学】第二篇 C4信息与通信网络运营 (C4) ——数据中心网络运营04 典型值:λ1​∈[−0.02,−0.01], λ2​∈[−0.01,0], η1​,η3​∈[0.1,0.3], η2​,η4​∈[0.05,0.15]参数:δ1​∈[−0.8,−0.3], δ2​∈[−0.5,−0.2], δ3​∈[−0.4,−0.1], δ4​∈[−0.6,−0.2]参数:φ1​∈[0.1,0.3], φ2​∈[−0.2,−0.05], φ3​∈[−0.1,0.1], φ4​∈[−0.3,−0.1]参数:α∈[0.3,0.6], β∈[0.2,0.4], γ∈[0.01,0.03] 阅读详情
/**********************************************************************************
                            命名管道 (FIFO) 
利用命名管道实现单机双人聊天
提示: 父进程创建子进程,实现多任务。父进程负责发信息(向FIFO里写数据),子进 
       程负责接收信息( 从FIFO里读数据)。 打开命名管道的用阻塞的方法打开。 
***********************************************************************************/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

//条件编译
#ifdef LUCY
	char sender_name[] = "lucy";
	char receiver_name[] = "peter";
	#define SEND_FIFO "L_P"
	#define RECEIVE_FIFO "P_L"
#endif

#ifdef PETER
	char sender_name[] = "peter";
	char receiver_name[] = "lucy";
	#define SEND_FIFO "P_L"
	#define RECEIVE_FIFO "L_P"
#endif

void talk(void)
{
	pid_t pid;
	//建立两个管道分别实现收发消息
	mkfifo(SEND_FIFO, 0666);
	mkfifo(RECEIVE_FIFO, 0666);

	pid = fork();
	if(pid < 0)
	{
		perror("fork");
	}
	else if(pid == 0)//接收信息
	{
		int receive_fd;
		//以只读方式打开管道而使管道在无写者时阻塞
		receive_fd = open(RECEIVE_FIFO, O_RDONLY);
		while(1)
		{
			char tmp[255] = "";
			int ret;

			ret = read(receive_fd, tmp, sizeof(tmp));
			if(ret == 0)
			{
				break;
			}
			printf("\r\e[K%s:%s\n", receiver_name, tmp);
			printf("%s:", sender_name);
			fflush(stdout);//刷新缓冲区
		}
	}
	else if(pid > 0)//发信息
	{
		int send_fd;
		//以只写方式打开管道而使管道在无读者时阻塞
		send_fd = open(SEND_FIFO, O_WRONLY);
		while(1)
		{
			char tmp[255] = "";

			printf("%s:", sender_name);
			fflush(stdout);
			fgets(tmp, sizeof(tmp), stdin);
			//fprintf(stdin,"%s",tmp);
			tmp[strlen(tmp)-1] = 0;//将fgets得到的\n换成\0
			write(send_fd, tmp, strlen(tmp));
		}
	}
}

int main(int argc, char *argv[])
{
	talk();
	return 0;
}

编译:

gcc  -DLUCY  fifo.c -o lucy 

gcc -DPETER fifo.c -o peter

使用两个终端运行上面两个应用会生成两个管道文件节点如下:

【管理科学】第三十五篇 企业经营中的管理科学01 权力、风险、运营、物流、人力资源、库存、合同、品牌、业绩、项目 编号类型领域子领域/内容问题问题的数学分析(电磁/信息论/数学物理/数学化学/界面科学/表面科学 + 几何/拓扑/代数/集合论/图论/数论/函数评估/数值估计/概率/统计/向量/张量/矩阵/矢量 + 其他)算法逐步推理思考的数学表达式及实现步骤及时序流程 参数列表及参数的数值范围及数值分析及常量/常数1管理科学问题运营管理生产计划如何分配有限资源生产多种产品以最大化利润?线性代数、凸优化、单纯形法;向量与矩阵目标函数 max c^T x,约束 Ax ≤ b, x ≥ 0。步骤:①标准化引入松弛变量;②构建初 阅读详情

相关推荐

命名管道实现点对点聊天程序

利用命名管道实现本机两个进程之间通信。一个服务器,一个客户端。可以通过修改管道的名字实现网络通信(参照管道的命名方法),并且可以通过修改服务器创建管道时的参数,实现服务器与多个客户之间的的通信。 相对于Socket编程,通过命名管道的实现方法更简单,尤其适用于客户端少且数据量大的场合,而且在单机不同进程间通信方面也比用Socket更优。

c++利用有名管道实现两个进程的简单聊天程序

【代码】c++利用有名管道实现两个进程的简单聊天程序。

m0_47471640的博客 205

利用LINUX FIFO命名管道技术实现双向聊天的C语言源代码

/**************************************************************************/ //本程序是利用LINUX FIFO命名管道技术实现双向聊天的C语言源代码。 //优点:代码简洁明了。 //其中: //chat.c: 聊天源代码。 //makefile: 利用宏定义,把一个源码生成两个不同的可执行程序。 // //使用: //make clean 清除上次编译生成的结果文件。 //make 重新编译生成两个可执行程序。./a_chat和./b_chat的执行顺序没有先后。 //作者:david.q@sz 2012-8-11 2263537@qq.com /**************************************************************************/

Linux有名管道学习——实现两个进程的简单聊天

为了克服匿名管道只能用于亲缘关系的进程间通信缺点,提出了有名管道(FIFO),也叫命名管道、FIFO文件一旦打开了FIFO,就能在它上面使用与操作匿名管道和其他文件的系统调用一样的I/O系统调用了(如read()、write()和close())。与管道一样,FIFO也有一个写入端和读取端,并且从管道中读取数据的顺序与写入的顺序是一样的。FIFO的名称也由此而来:先入先出。通过命令创建有名管道mkfifo 名字通过函数创建有名管道关于mkfifo函数pathnamemode0-1openreadread。

qq_51011672的博客 1522

用消息队列,实现聊天程序

用消息队列,实现聊天程序用消息队列,实现聊天程序,每次发言后自动在后面增加当前系统时间。增加结束字符,比如最后输入“88”后结束进程。

告别密码烦恼:用Windows Server NPS给公司Wi-Fi和有线网加一道MAC地址白名单(附H3C交换机配置)

本文详细介绍了如何利用Windows Server NPS(网络策略服务器)与H3C交换机实现MAC地址白名单认证,为企业Wi-Fi和有线网络提供零密码安全方案。通过配置NPS服务器、网络策略及H3C交换机联调,实现无感知认证体验,降低运维负担,同时满足审计追溯需求。适用于中小企业网络管理,提升安全性与便捷性。

weixin_42535703的博客 367

Linux高级程序设计(四)

该课程将讲授有关对操作系统的基本操作、liunx环境下的程序设计等。

RTX4090上跑CenterNet训练

参考实现 url=https://github.com/xingyizhou/CenterNet.git commit_id=5b1a490a52da57d3580e80b8bb4bbead9ef2af96

遗失的神庙 1622

用命名管道实现进程间的通信-----简单聊天室的建立

本篇博文讲的是用两个命名管道实现简单聊天室的建立,本质上就是进程间的通信 程序共有四部分组成:命名管道myfifo 命名管道yourfifo 服务器端 客户端 功能实现过程:服务器端父进程往myfifo中写数据      客户端子进程从myfifo中读取服务器端父进程发送来的数据    客户端父进程往yourfifo中写数据     服务器端子进程从yourfifo中读取客户端父进

maizi_hsx的博客 2774

Ubutntu下使用realsense d435i(二):获取某二维像素点的三维坐标

00 准备工作 准备工作包括安装驱动以及pyrealsense2,具体可参考上一篇: Ubutntu下使用realsense d435i(一):准备工作以及安装pyrealsense2 https://blog.youkuaiyun.com/gyxx1998/article/details/121461293 01 通过二维像素点获得物体三维坐标 这个在上一篇已经介绍了代码: realsense d435i获取某像素点三维坐标(计算深度和点云两种方法) https://blog.youkuaiyun.com/gyxx1998/

gyxx1998的博客 9943

Origin绘制带差异显著性标记的分组均值条形图|科研论文图表教程(附数据格式模板)

传统柱状图虽能呈现组间均值差异,却隐藏个体数据分布;散点图虽能展示原始数据,却难以直观凸显统计显著性。带差异显著性(*)的分组均值条形图——它以“双层叙事”的创新设计,同时呈现群体特征与个体差异。

weixin_50236590的博客 1493

BetterNCM 完整教程:3 分钟装好网易云音乐插件管理器

BetterNCM 是一个面向网易云音乐客户端(支持 2.10 ~ 3.0)的开源插件管理器,让你不用动客户端本体,就能给它加主题、播放控制、歌词增强这些第三方能力。下面按"装好 → 用起来 → 出问题怎么办"的顺序,带你走一遍新手入门路线。 ## BetterNCM 是什么:网易云音乐插件管理器一句话定位 **BetterNCM 是给网易云音乐客户端"装插件"的开源管理器**,覆盖 2.10

gitblog_00701的博客 386

ProgLoss+STAL 技术详解:YOLO26 小目标检测增强方案

本文提出了一种基于ProgLoss渐进式损失函数和STAL小目标感知标签分配的YOLO26增强方案。针对小目标检测中特征信息少、正负样本不平衡等难题,STAL通过尺度感知的标签分配策略动态调整候选样本数量和IoU阈值,为小目标分配更多正样本;ProgLoss则根据训练阶段动态调整分类和回归损失的权重,早期侧重定位能力,后期加强分类精度。实验表明,该组合方案显著提升了小目标检测性能,在COCO数据集上小目标AP达到38.2%,比基线提升6.5个百分点。该方法为遥感、监控等场景的小目标检测提供了有效解决方案。

一键难忘的博客 1284

linux 命令:scp (pscp)、rz/sz、nc (netcat)、ncat、socat、ssh、端口转发(rinetd)

NC 全名 Netcat (网络刀),作者是 Hobbit && ChrisWysopal。因其功能十分强大,体积小巧而出名,被誉为网络安全界的 "瑞士军刀"。Netcat 使用 TCP 或 UDP 协议的网络连接去读写数据。Netcat 也是稳定的后门工具、功能强大的网络调试和探测工具。能够直接由其它程序和脚本轻松驱动。能够建立几乎所有类型的网络连接。在中国NC 的 WINDOWS版有两个版本,一个是原创者Chris Wysopal写的原版本,另一个是由 "红与黑" 编译后的新浓缩版。.........

freeking101的博客 3万+

【原创教程】汇川H5U入门教案第二课

定时器指令IN输入能流从OFF变为ON时,定时器启动计时,输出Q为ON,IN输入能流从ON变为OFF时,在IN保持为OFF期间,定时器的运行时间是PT参数指定的时间,定时器定时时间达到PT参数指定的时间后,Q变为OFF。IN输入能流为ON时,ET输出值为0,IN从ON变为OFF时,在定时器计时运行期间,ET输出当前的计时时间,定时器计时时间到达PT参数指定的时间后,ET值保持。IN输入能流为ON时,在定时器计时运行期间,ET输出当前的计时时间,定时器计时时间到达PT参数指定的时间后,ET值保持;

Qinmingyue13的博客 2478

SAP Group Reporting入门指南(1)--开篇及系统环境搭建

文章介绍了SAP GR的发展历程、与BPC的对比优势,数据收集的多种方式(实时同步、外部导入等)以及合并整体流程,并推出《SAP Group Reporting入门指南》专栏。

bflyfish的博客 282

利用命名管道实现简单聊天功能

利用命名管道实现简单聊天功能 进程A: 以只写方式打开FIFO1 以只读方式打开FIFO2 循环读写数据 进程B: 以只读方式打开FIFO1 以只写方式打开FIFO2 循环读写数据 chata.c如下 #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <stdlib.h> #include <fcnt

编程小镇 614

Serial RapidIO Gen2 IP 说明(三)

前言 继续接着上篇文章,介绍Serial RapidIO Gen2 IP 的具体端口信息。 一、端口描述 1、缓冲设计接口 2、物理层接口 参考说明 【1】Serial RapidIO Gen2 v4.1https://china.xilinx.com/content/dam/xilinx/support/documentation/ip_documentation/srio_gen2/v4_1/pg007_srio_gen2.pdf ...

记录所学,分享知识,结识挚友 1320

今天学完管道,利用管道实现单机聊天程序。小白勿喷

今天学完管道,利用管道实现单机聊天程序。小白勿喷 * *思路 :父进程创建子进程,实现多任务。 父进程负责发信息(向 FIFO 里写数据),子进程负责接收信息( 从 FIFO 里读数据)。 ** 流程图 : 代码 //lucy端 #include<stdio.h> #include<unistd.h> #include<string.h> #include&lt...

xddwg521125的博客 1081

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

一个简单的聊天程序--命名管道FIFO

本程序是一个使用FIFO进行进程间通信的典型程序lucy.c创建了FIFO write──fifo用于向程序peter.c发送信息:程序创建了FIFO read-fifo,用于向lucy.c发送消息。编译本程序,先运行peter.c再运行lucy.c就可以了。 源程序如下: //filename:lucy.c #include<sys/types.h> #include...

weixin_33962621的博客 544

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

利用linux管道实现一个单向聊天工具

一、linux下管道基础 二、单向通信具体实现 三、完成

dai_wen的博客 686

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

命名管道(FIFO)聊天程序

{优快云:CODE:202} {优快云:CODE:201}

xhjcehust的专栏 1647

利用有名管道实现进程间通信(聊天小程序)

/* 名称:利用有名管道实现进程间通信(聊天小程序) 说明:此程序,是有名管道实现进程间的相互通信。 关于有名管道,需要说的是,它是一个特殊的文件,因为它的名字会保存在文件系统中(inode节点,这也是其为什么能在无关进程间通信的原因吧)但是,它的内容并不是在内存中(无名管道的名字和内容都是放在内存中的)。 关于管道的建立,有一点要说明的就是一般来说,我们

xiaopan的博客 3804

设计两个程序要求用消息队列实现简单的聊天功能linux,系统软件课设题目分配(软件0801-0806)...

系统软件实践课程设计要求--Linux环境下C语言程序设计软件0801-0806下面有五个部分组成,每个部分内容不一样。每一题后面红字部分表示的是这道题的难度系数。每个同学从下面五个部分中自己挑选题目来做,可选择两到四道。要求所选择的两到四题不能同属于同一部分,也就是说如果是三道题,那么这三道题分别是属于三部分的。并且保证所选题目的难度系数之和不能小于4。注意:所有同学所选择的题目不能完全一样。自...

weixin_36329465的博客 233
上一篇: 压缩指定字符
下一篇: 工作队列使用心得
Aiden@semidrive
博客等级 码龄14年 110粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值