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

Linux系统---基于Pipe实现一个简单Client-Server system

顾得泉:个人主页

个人专栏:《Linux操作系统》  《C/C++》  《LeedCode刷题》

键盘敲烂,年薪百万!


一、题目要求

       Server是一个服务器进程,只能进行整数平方运算。Client要计算一个整数的平方的平方的平方,即(((x)^2)^2)^2,我们通过Client与Server的三次通信来完成计算:第一次Client通过command管道将x送到Server,由Server计算出x^2,并通过response管道送回Client。第二次,Client收到x^2后,将其通过command管道再次送到Server,由Server计算出(x^2)^2,并通过response管道送回Client。如此过程,经过三次通信过程,可以计算出(((x)^2)^2)^2,然后由Client打印出计算结果。


二、模块描述

       本文用于创建一个子进程,并通过管道进行通信。主进程将一个整数n发送给子进程,子进程计算n的平方并将结果返回给主进程。最后,主进程打印出子进程计算得到的结果。

        1.首先,通过atoi(argv[1])将命令行参数转换为整数n。

        2.定义两个整数数组com和res,分别用于存储管道的读端和写端的文件描述符。

        3.使用pipe()函数创建两个管道,分别将com[0]和com[1]作为读端,将res[0]和res[1]作为写端。

        4.使用fork()函数创建一个子进程。如果创建失败,输出错误信息并退出程序。

        5.如果当前进程是父进程(pid > 0),则关闭管道的读端和写端,然后循环4次,每次向管道的写端写入整数n,并从管道的读端读取整数n。

        6.在循环结束后,打印子进程计算得到的结果n,然后使用kill()函数发送SIGKILL信号终止子进程,接着使用waitpid()函数等待子进程结束。最后,退出主进程。

        7.如果当前进程是子进程(pid == 0),则关闭管道的读端和写端,然后进入一个无限循环。在循环中,从管道的读端读取整数n,计算n的平方,并将结果写入管道的写端。当读取到的整数为负数时,跳出循环。最后,退出子进程。


三、代码实现

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>#define MAXLINE 20  int main(int argc, char* argv[]) 
{int n = atoi(argv[1]);  int com[2];   int res[2];   pid_t pid;if (pipe(com) < 0 || pipe(res) < 0) {perror("pipe error");exit(EXIT_FAILURE);}if ((pid = fork()) < 0) {perror("fork error");exit(EXIT_FAILURE);}if (pid > 0) {    close(com[0]);  close(res[1]); for (int i = 1; i < 4; i++) {write(com[1], &n, sizeof(int));  read(res[0], &n, sizeof(int));  }printf("result is %i\n", n);kill(pid, SIGKILL);   waitpid(pid, NULL, 0); exit(EXIT_SUCCESS);} else {     close(com[1]);  close(res[0]);  while (1) {if (read(com[0], &n, sizeof(int)) <= 0)  break;  n = n * n;   write(res[1], &n, sizeof(int));  }exit(EXIT_SUCCESS);}
}

四、结果展示

       当我们把相对应的文档编辑好后,首先进行的是gcc操作,接着进行运行,运行的时候要把相对应要求的参数传进去,比方说要求2的8次方,就进行下述操作,具体实现步骤与结果如下:


结语:Linux系统基于Pipe实现一个简单Client-Server system系统的分享到这里就结束了,希望本篇文章的分享会对大家的学习带来些许帮助,如果大家有什么问题,欢迎大家在评论区留言~~~  

相关文章:

Linux系统---基于Pipe实现一个简单Client-Server system

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、题目要求 Server是一个服务器进程&#xff0c;只能进行整数平方运算。Client要计算一个整数的平方的平方的平方&#xff0c;即…...

CentOS7安装最新版本git

CentOS7上的git是1.8.3.1&#xff0c;比较老&#xff0c;使用体验不好。下载源码来升级一下。 sudo yum -y install dh-autoreconf curl-devel expat-devel gettext-devel openssl-devel perl-devel zlib-devel sudo yum -y iinstall asciidoc xmlto docbook2X sudo yum -y in…...

Java项目-瑞吉外卖Day3

填充公共字段&#xff1a; 目的&#xff1a;由于某些属性&#xff0c;例如createdTime这些需要填充的字段会在多个地方出现&#xff0c;所以考虑使用公共字段自动填充的办法减少重复代码。 在对应属性上加入TableField注解。通过fill字段表明策略&#xff0c;是插入/更新的时候…...

Java集合框架之争:ArrayList vs LinkedList

友情提示&#xff1a;LinkedList其实就是数据结构中的双向链表&#xff0c;没学过的话可以学一下有关链表的知识&#xff0c;至于LinkedList中的源码其实大多数据结构的基本链表操作实现的&#xff0c;这里我就不多做说明了&#xff0c;有兴趣的话可自行看源码 由于ArrayList由…...

一个用于处理嵌入式系统中的 NAND Flash 存储器的工具 `kobs-ng`

一个用于处理嵌入式系统中的 NAND Flash 存储器的工具 kobs-ng kobs-ng 是一个用于处理嵌入式系统中的 NAND Flash 存储器的工具。它是 U-Boot&#xff08;开源引导加载程序&#xff09;中的一个子项目&#xff0c;用于擦除、写入和读取 NAND Flash 设备上的数据。 以下是 kob…...

【小白专用】MySQL查询数据库所有表名及表结构其注释

一、先了解下INFORMATION_SCHEMA 1、在MySQL中&#xff0c;把INFORMATION_SCHEMA看作是一个数据库&#xff0c;确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名&#xff0c;数据库的表&#xff0c;表栏的数据类型与访问权 限等。在INF…...

数据库中常用的锁

目录 1、数据库中常用的锁类型 2、常见的数据库 3、以MySQL为例 3.1 MySQL的事务 3.2 MySQL事务的四大特性 1. 原子性&#xff08;Atomicity&#xff09; 2. 一致性&#xff08;Consistency&#xff09; 3. 隔离性&#xff08;Isolation&#xff09; ⭐mysql中的事务隔…...

关于对向量检索研究的一些学习资料整理

官方学习资料 主要是的学习资料是&#xff0c; 官方文档 和官方博客。相关文章还是挺多 挺不错的 他们更新也比较及时。有最新的东西 都会更新出来。es scdn官方博客 这里简单列一些&#xff0c;还有一些其他的&#xff0c;大家自己感兴趣去看。 什么是向量数据库 Elasticse…...

软件开发流程分析

软件开发流程分析 相关概念1 原型设计2 产品设计3 交互设计4 代码实现详细步骤 相关概念 前端&#xff1a;自研API&#xff0c;调用第三放API 后端&#xff1a;自研API&#xff0c;第三方API 数据库&#xff1a;Mysql&#xff0c;数据采集&#xff0c;数据迁移 服务器&#xf…...

017 OpenCV 向量机SVM

目录 一、环境 二、SVM原理 三、完整代码 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、SVM原理 OpenCV中的向量机&#xff08;SVM&#xff09;是一种监督学习算法&#xff0c;用于分类和回归分析。它通过找到一个最优的超平…...

Qt练习题

1.使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否…...

文本转图像 学习笔记

VQGAN (Vector Quantized Generative Adversarial Network) 是一种基于 GAN 的生成模型&#xff0c;可以将图像或文本转换为高质量的图像。 VQ &#xff08;Vector Quantization&#xff09;是一种数据压缩技术&#xff0c;是指将连续数据表示为离散化的向量。输入的图像或文本…...

开源CDN软件GoEdge —— 筑梦之路

官方网站&#xff1a;GoEdge CDN - 制作自己的CDN - GoEdge CDN | 自建CDN GoEdge是一款管理分布式CDN边缘节点的开源工具软件&#xff0c;目的是让用户轻松地、低成本地创建CDN/WAF等应用。 特性 免费 - 开源、免费、自由、开放 简单 - 架构简单清晰&#xff0c;安装简单&a…...

基于SpringBoot+Vue会员制医疗预约服务管理信息系统(Java毕业设计)

点击咨询源码 大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的…...

【Linux | 编程实践】防火墙 (网络无法访问)解决方案 Vim常用快捷键命令

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…...

仅 CSS 阅读进度条

为了构建一个阅读进度条&#xff0c;即显示用户向下滚动时阅读文章的进度&#xff0c;很难不考虑 JavaScript。但是&#xff0c;事实证明&#xff0c;您也可以使用纯 CSS 构建阅读进度条。 从本质上讲&#xff0c;一个名为 animation-timeline 的新实验性 CSS 属性可以让你指定…...

深度剖析中国居民消费价格指数CPI数据可视化案例-Python可视化技术实现(附完整源码)【数据可视化项目案例-16】

🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本专栏包括所有的可视化技术学习,感兴趣可以到本专栏页面,查阅可视化宝典可快速了解本专栏。订阅专栏用户可以在每篇文章底部下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不论…...

SpringBoot——嵌入式 Servlet容器

一、如何定制和修改Servlet容器的相关配置 前言&#xff1a; SpringBoot在Web环境下&#xff0c;默认使用的是Tomact作为嵌入式的Servlet容器&#xff1b; 【1】修改和server相关的配置&#xff08;ServerProperties实现了EmbeddedServletContainerCustomizer&#xff09;例如…...

王炸升级!PartyRock 10分钟构建 AI 应用

前言 一年一度的亚马逊云科技的 re:Invent 可谓是全球云计算、科技圈的狂欢&#xff0c;每次都能带来一些最前沿的方向标&#xff0c;这次也不例外。在看完一些 keynote 和介绍之后&#xff0c;我也去亲自体验了一些最近发布的内容。其中让我感受最深刻的无疑是 PartyRock 了。…...

文件管理和操作工具Path Finder mac功能介绍

Path Finder mac是一款Mac平台上的文件管理和操作工具&#xff0c;提供了比Finder更丰富的功能和更直观的用户界面。它可以帮助用户更高效地浏览、复制、移动、删除和管理文件&#xff0c;以及进行各种高级操作。 Path Finder mac软件功能 - 文件浏览&#xff1a;可以快速浏览文…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...