系统编程(4):进程间通信

news2024/12/29 9:23:06

文章目录

  • 管道通信
    • 无名管道
    • 有名管道

管道通信

在这里插入图片描述

无名管道

无名管道只能在有亲缘关系之间的进程间通信(比如父子进程)。

  • 第一步是创建一个管道,这个管道有两个文件描述符
  • 一个读,一个写

在这里插入图片描述- 两个文件描述符fd[2],一个文件描述符(fd[0])用来读,一个文件描述符(fd[1])用来写。

man命令查询:man 2 pip

PIPE(2)                                           Linux Programmer's Manual                                          PIPE(2)

NAME
       pipe, pipe2 - create pipe

SYNOPSIS
       #include <unistd.h>

       int pipe(int pipefd[2]);

       #define _GNU_SOURCE             /* See feature_test_macros(7) */
       #include <fcntl.h>              /* Obtain O_* constant definitions */
       #include <unistd.h>

       int pipe2(int pipefd[2], int flags);

DESCRIPTION
       pipe()  creates  a  pipe,  a  unidirectional data channel that can be used for interprocess communication.  The array
       pipefd is used to return two file descriptors referring to the ends of the pipe.  pipefd[0] refers to the read end of
       the  pipe.   pipefd[1] refers to the write end of the pipe.  Data written to the write end of the pipe is buffered by
       the kernel until it is read from the read end of the pipe.  For further details, see pipe(7).

代码验证:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>

int main(void)
{
    pid_t pid;
    int fd[2]; // read: fd[0], write: fd[1]
    char buf[32] = {0};

    pipe(fd);

    printf("fd[0] is %d\n", fd[0]);
    printf("fd[1] is %d\n", fd[1]);

    pid = fork();

    if(pid < 0)
    {
        printf("error \n");
    }

    if(pid > 0)
    {
        int status;

        close(fd[0]);
        write(fd[1], "hello", 5);
        close(fd[1]);

        wait(&status);
        exit(0);
    }

    if(pid == 0)
    {
        close(fd[1]);
        read(fd[0], buf, 32);
        printf("buf is %s\n", buf);
        close(fd[0]);
        exit(0);
    }
}

有名管道

有名管道可以实现没有任何关系之间的进程进行通信。

有名管道第一步不是创建管道,而是创建一个FIFO类型的特殊文件,使用的创建函数是:

#include <sys/types.h>
#include <sys/stat.h>


int mkfifo(const char *pathname, mode_t mode);

查看函数使用的命令是man 3 mkfifo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧城市同城V4小程序V2.27独立开源版 + 小程序+全插件+VUE小程序开源前端 安装测试教程

智慧城市同城V4小程序V2.27开源独立版本月最新版&#xff0c;与上一版相比修复了一些小细节&#xff0c;功能本身并无大的变化。体验下来感觉唯一区别用户授权一键就登陆了&#xff0c;上两版都需要选择头像呢称。新版系统包含全插件、包括很多稀缺收费的插件都在里面如括招聘、…

操作系统|知识梳理|复习(下)

目录 &#x1f4da;文件与外存空间 &#x1f407;文件的概念 &#x1f407;文件系统的概念 &#x1f407;文件的组织——路径与目录 &#x1f407;文件的存储⭐️ &#x1f955;连续分配法 &#x1f955;链接分配法 &#x1f955;扩展分配法 &#x1f955;链表备份法 …

chatgpt赋能python:Python生成指定位数SEO文章的方法

Python生成指定位数SEO文章的方法 在网站优化中&#xff0c;SEO是一项非常重要的工作&#xff0c;它能够帮助我们提高网站的排名&#xff0c;并吸引更多的流量。在进行SEO优化时&#xff0c;我们需要开发一些有关关键词的文章。本文将介绍如何使用Python生成指定位数的SEO文章…

【前端基础篇】盒子模型、边距、边框、外边距合并问题详解

文章目录 一、盒模型概念与组成1.1 生活举例1.2 概念 二、盒模型组成分析2.1 **内容区&#xff08;content&#xff09;**2.2 内填充&#xff08;padding&#xff09;2.3 **边框&#xff08;border&#xff09;**2.5 外边距&#xff08;margin&#xff09;2.6 外边距合并问题2.…

【Django 网页Web开发】06. 模板继承的主题导航栏案例 高效开发 便捷维护(保姆级图文)

目录 实现效果模板继承moban.html 模板页面子页面test1.htmltest2.html url.pyview.py常见格式总结 欢迎关注 『Django 网页Web开发』 系列&#xff0c;持续更新中 欢迎关注 『Django 网页Web开发』 系列&#xff0c;持续更新中 实现效果 很多页面都有导航栏&#xff0c;以CSD…

CAD绘制等分点(定距、定数)

练习用CAD绘制等分点 分成两种&#xff0c;分别为定距分点和定数分点 前者指按照一定的距离在给出的线上绘制等分点 后者将已知的线分为确定的份数&#xff0c;绘制等分点 这里用绘制燃气灶的燃气孔为例&#xff1a; 首先绘制两个长方形作为基础 生成中心线作为参考 使用时…

视频网页前端禁止截屏代码实现js

有言在先 原理是采用商业级DRM实现&#xff0c;DRM 许可证费用目前没有免费服务商&#xff0c;腾讯云价格是0.0056元/次。 另外此功能不兼容安卓&#xff0c;安卓系统无法正常播放视频&#xff01; 先展示效果 可以看到截屏时刻出现黑屏&#xff0c;录屏也能保证全黑状态。…

独立站的Facebook运营策略探索

Facebook广告是独立站吸引流量和推广业务的重要工具。然而&#xff0c;如何有效地运用Facebook广告&#xff0c;提高曝光率、点击率和转化率&#xff0c;是每个独立站主的关注焦点。本文将探索独立站如何巧妙地运用Facebook广告&#xff0c;实现精准引流和业务增长。 第一&…

性能优化-内存优化

8-《内存优化》 一.基础知识1.Java的内存分配区域2.Java的引用类型3.Java的垃圾回收机制&#xff1a;三个问题4.Android的内存管理机制 二. Android的内存泄漏、内存溢出、内存抖动概念1.**内存泄露**2.**内存抖动**3.常见的内存泄漏现象 三. 工具1.Profiler2.MAT3. Leak Canar…

高效工作了

高效工作 目录概述需求&#xff1a; 设计思路实现思路分析1.安排计划 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive.…

STC15WProteus仿真HX711电子秤串口计价称重4x4键盘STC15W4K32S4

STC15WProteus仿真HX711电子秤串口计价称重4x4键盘STC15W4K32S4 Proteus仿真小实验&#xff1a; STC15WProteus仿真HX711电子秤串口计价称重4x4键盘STC15W4K32S4 功能&#xff1a; 硬件组成&#xff1a;STC15W4K32S4单片机 LCD12864显示器4x4矩阵键盘HX711电子秤 1.单片机通…

人工智能领域:面试常见问题超全(深度学习基础、卷积模型、对抗神经网络、预训练模型、计算机视觉、自然语言处理、推荐系统、模型压缩、强化学习、元学习)

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

QTYX量化系统实战案例分享|以小搏大选股策略一天三涨停-202306第四弹

前言 “实战案例分享系列”是和大家分享一些股票量化分析工具QTYX在实战中的应用案例&#xff08;包括失败的案例&#xff09;&#xff0c;这样能够帮助大家更好地去理解QTYX中的功能设计&#xff0c;也能更好地帮助大家搭建出属于自己的量化交易系统。 关于QTYX的使用攻略可以…

想成为“专精特新”企业?可以从这4个方面入手...

一直以来我国高度重视培育壮大中小企业&#xff0c;“专精特新企业”是近年来政府各层面都在大力扶持的重点企业类型。大批中小企业积极将“数字化”“智能化”融入生产、管理、营销、供应链协作等各个方面&#xff0c;运用新技术、新手段&#xff0c;有效提高运营效率&#xf…

Shader Graph21-UV投影cubemap

准备 https://download.csdn.net/download/zhuziying99/87900710 需要先生成dds文件&#xff0c;可以使用两个工具如果是N卡的显卡&#xff0c;可以使用 Texture Tools Exporter | NVIDIA Developer 如果是A卡的显卡&#xff0c;可以使用CubeMapGen 一、打开Unreal&#x…

Vue中如何进行数据可视化大屏展示

Vue中如何进行数据可视化大屏展示 在现代数据驱动的应用程序中&#xff0c;数据可视化大屏已经成为了非常重要的一环。通过对海量数据进行可视化展示&#xff0c;可以帮助用户更好地理解和分析数据&#xff0c;从而做出更加明智的决策。在Vue中进行数据可视化大屏展示也变得越…

SpringBoot+Vue+Java 的高校招生管理系统

文章目录 源码下载地址简介系统设计思路1 数据库设计2 系统整体设计2.1 系统设计思想2.2系统流程图 系统详细设计1系统功能模块2. 管理员功能模块3学生功能模块 源码下载地址 源码下载地址 源码下载地址https://download.csdn.net/download/JasonXu94/87870946 简介 本次设计…

开源游戏区块链项目分享:Unity开发的独立区块链

Arouse Blockchain [Unity独立区块链] ❗️千万别被误导&#xff0c;上图内容虽然都在项目中可寻&#xff0c;但与目前区块链的业务代码关联不大&#xff0c;仅供宣传作用(总得放些图看着好看)。之所以有以上内容是项目有个目标功能是希望每个用户在区块链上都有一个独一无二的…

Unity3D:Scene 视图摄像机

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 Scene 视图摄像机 摄像机设置菜单包含用于配置 Scene 视图摄像机的选项。这些调整不会影响带有摄像机组件的游戏对象上的设置。 要访问摄像机设置菜单&#xff0c;请单击 Scene 视…

安装MYSQL环境(window/linux环境)(SQL 小虚竹)

回城传送–》《100天精通MYSQL从入门到就业》 文章目录 一、windows安装mysql下载只安装mysql server客户端连接测试 二、linux安装mysql安装前的准备关闭CentOS 防火墙关闭SELinux为什么要关闭SELinux 创建MySQL用户和组 下载安装mysql解压mysql安装包配置环境创建数据目录新…