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

这篇具有很好参考价值的文章主要介绍了Linux系统---基于Pipe实现一个简单Client-Server system。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux系统---基于Pipe实现一个简单Client-Server system,Linux操作系统,linux,服务器,ubuntu,运维

顾得泉:个人主页

个人专栏:《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打印出计算结果。

Linux系统---基于Pipe实现一个简单Client-Server system,Linux操作系统,linux,服务器,ubuntu,运维


二、模块描述

       本文用于创建一个子进程,并通过管道进行通信。主进程将一个整数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操作系统,linux,服务器,ubuntu,运维


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

到了这里,关于Linux系统---基于Pipe实现一个简单Client-Server system的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Erocool是一个编程项目 - 实现一个基于Python的简单游戏

    在这篇文章中,我们将探讨一个名为Erocool的编程项目,它是一个基于Python的简单游戏。我们将详细介绍这个项目的目标、功能和实现细节,并提供相应的源代码。 Erocool项目的目标是创建一个有趣的游戏,其中玩家需要通过键盘输入正确的答案来解决问题。这个游戏的主题是

    2024年01月23日
    浏览(50)
  • [Linux]进程控制精讲,简单实现一个shell

    目录 前言 进程创建 fork函数初识 写时拷贝 fork常见用法 fork调用失败的原因 进程终止 进程退出场景 进程退出码 查看进程退出码 退出码的含义 进程常见退出方法 exit VS _exit exit函数 _exit函数 二者的区别 return退出 进程等待 进程等待必要性 进程等待的方法 wait方法 waitpid方法

    2023年04月26日
    浏览(47)
  • 基于 Python 实现一个简单的 HTTP 服务器

    文章这个题目,让我想起了大学时上《Unix 网络编程》这门专业课的家庭作业,题目几乎一模一样。 HTTP 服务器工作在服务端,主要功能包括处理来自客户端的请求,管理网络资源,以及生成和发送响应给客户端。在实际应用中,HTTP 服务器不仅限于传输 HTML 文档;它还可以传

    2024年03月22日
    浏览(58)
  • 【Python】实现一个简单的区块链系统

    本文章利用 Python 实现一个简单的功能较为完善的区块链系统(包括区块链结构、账户、钱包、转账),采用的共识机制是 POW。 Block.py  BlockChain.py  测试结果  将工作量证明加入到 Block.py 中 测试结果 更新 BlockChain.py  测试结果  实现钱包、账户、交易功能要先安装非对称加

    2024年02月11日
    浏览(41)
  • 《Linux从练气到飞升》No.21 Linux简单实现一个shell

    🕺作者: 主页 我的专栏 C语言从0到1 探秘C++ 数据结构从0到1 探秘Linux 菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇 码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢阅读!!!

    2024年02月09日
    浏览(39)
  • 一个基于.NET Core构建的简单、跨平台、模块化的商城系统

    今天大姚给大家分享一个基于.NET Core构建的简单、跨平台、模块化、完全开源免费(MIT License)的商城系统:Module Shop。 商品:分类、品牌、单位、选项(销售属性)、属性、属性模板、属性组。 销售:订单、物流。 内容:首页配置、评论、回复。 配置:国家、用户、仓库

    2024年03月27日
    浏览(191)
  • 【Servlet综合项目练习】实现一个简单的博客系统~

    目录 🌟一、数据库设计部分 1、建表分析:系统中一共要实现几张表?  2、开始建表 🌟二、大概框架与实现功能 🌟 三、代码实现部分 🌈前言1:工具类的实现(utils包下) 1、数据库连接的工具类 2 、 用户信息判空的工具类 3、判断当前用户是否已经登录的工具类 🌈前

    2024年02月15日
    浏览(36)
  • 记录--Vue3基于Grid布局简单实现一个瀑布流组件

    在学习Grid布局之时,我发现其是CSS中的一种强大的布局方案,它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,在刷某书和某宝首页时,我们发现其展示方式就是一种瀑布流,是一种流行的网站页面布局,视觉表现为参差不齐的多栏布局,随着页

    2024年02月05日
    浏览(61)
  • Javaweb项目案例:一个简单的用户管理系统实现

    我们来设计一个简单的用户管理系统,具有查看用户,添加用户,删除用户,更新用户的所有功能,并能支持分页显示,以及通过模糊查询的 本项目采用Druid数据库连接池 注意:JDBC和DAO部分本文不予演示,请自行完成此部分代码的编写🐿️ 模板页面,showuser.html Sho

    2024年02月09日
    浏览(48)
  • 用Java语言实现一个简单的图书管理系统

    这个系统有两个登录选项:用户和管理员,选择两者进入都需要输入账号和密码进行审核。 用户有查看图书列表,借阅图书,归还图书这些选项,管理员有查看图书列表,增加图书,删除图书,修改图书这些选项。 我们先建一个Book类,用来存放图书名称以及借阅状态,图书

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包