当前位置: 首页 > 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;可以快速浏览文…...

Phi-3-mini-4k-instruct-gguf代码实例:curl健康检查与supervisor服务管理实操

Phi-3-mini-4k-instruct-gguf代码实例&#xff1a;curl健康检查与supervisor服务管理实操 1. 模型简介与部署准备 Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本&#xff0c;特别适合问答、文本改写、摘要整理和简短创作等场景。这个经过优化的…...

Llama-3.2V-11B-cot实战教程:集成Whisper实现音视频+图像联合推理

Llama-3.2V-11B-cot实战教程&#xff1a;集成Whisper实现音视频图像联合推理 1. 项目概述与核心能力 Llama-3.2V-11B-cot是一个强大的视觉语言模型&#xff0c;它不仅能理解图像内容&#xff0c;还能进行系统性推理。这个模型基于LLaVA-CoT论文实现&#xff0c;特别适合需要结…...

SenseVoice-Small ONNX精彩案例分享:10分钟会议录音→带标点可编辑文本

SenseVoice-Small ONNX精彩案例分享&#xff1a;10分钟会议录音→带标点可编辑文本 本文展示SenseVoice-Small ONNX语音识别工具在实际会议录音转写场景中的惊艳效果&#xff0c;通过真实案例演示如何将10分钟会议录音快速转换为带标点、可编辑的规范文本。 1. 案例背景与工具价…...

OpenClaw+Phi-3-vision-128k-instruct安全方案:敏感数据本地化处理指南

OpenClawPhi-3-vision-128k-instruct安全方案&#xff1a;敏感数据本地化处理指南 1. 为什么需要本地化处理敏感数据&#xff1f; 上周我帮一位做财务咨询的朋友处理季度报表时&#xff0c;他提到一个痛点&#xff1a;每次用云端AI工具分析客户财务数据都提心吊胆。这让我意识…...

Python实战:用图论算法解决外卖骑手路径规划(VRP)问题

Python实战&#xff1a;用图论算法解决外卖骑手路径规划&#xff08;VRP&#xff09;问题 外卖配送效率直接影响用户体验和平台运营成本。当3名骑手需要处理10个订单时&#xff0c;如何科学分配任务并规划最优路径&#xff1f;本文将构建一个包含时间窗口约束的VRP模型&#xf…...

Python项目依赖管理:如何用pipreqs精准生成requirements.txt(附常见问题解决)

Python项目依赖管理实战&#xff1a;从pipreqs到高效协作的全链路优化 在Python项目开发中&#xff0c;依赖管理就像建筑的地基——它不显眼却决定了整个项目的稳定性。想象一下这样的场景&#xff1a;你花了三天时间调试一个诡异的问题&#xff0c;最后发现只是因为测试环境缺…...

解析器开发的终极革命:为什么Ohm比传统解析器更强大?

解析器开发的终极革命&#xff1a;为什么Ohm比传统解析器更强大&#xff1f; 【免费下载链接】ohm A library and language for building parsers, interpreters, compilers, etc. 项目地址: https://gitcode.com/gh_mirrors/oh/ohm Ohm是一个用于构建解析器、解释器和编…...

终极Markdown编辑器rich-markdown-editor:React + Prosemirror强强联合

终极Markdown编辑器rich-markdown-editor&#xff1a;React Prosemirror强强联合 【免费下载链接】rich-markdown-editor The open source React and Prosemirror based markdown editor that powers Outline. Want to try it out? Create an account: 项目地址: https://g…...

【数据结构与算法】二叉树从建立开始

为什么你学了二叉树却还是不会做题&#xff1f;从“建树”到“解题”的完整思维体系在学习数据结构的过程中&#xff0c;二叉树几乎是每个人都会接触的内容。但一个很现实的问题是&#xff1a;很多人会写遍历&#xff0c;却不会做题。表面上看是代码能力的问题&#xff0c;实际…...

DLSS Swapper:3步解锁游戏性能倍增的AI优化工具

DLSS Swapper&#xff1a;3步解锁游戏性能倍增的AI优化工具 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款专为PC游戏玩家设计的深度学习超级采样(DLSS)版本管理工具&#xff0c;通过智能环境诊断、…...