青岛公司网站建设公司网站建设 概念股

张小明 2026/1/9 10:35:34
青岛公司网站建设公司,网站建设 概念股,湖北网站建设联系电话,网站建立公司 优帮云第一部分#xff1a;通信的本质 —— “第三者”既然进程 A 和 进程 B 的内存是隔离的#xff0c;那它们怎么交换数据#xff1f; 答案#xff1a;找一个它们都能看到的“第三者”。这个“第三者”通常是操作系统内核。进程 A 把数据从用户空间拷贝到内核缓冲区。进程 B 从…第一部分通信的本质 —— “第三者”既然进程 A 和 进程 B 的内存是隔离的那它们怎么交换数据答案找一个它们都能看到的“第三者”。这个“第三者”通常是操作系统内核。进程 A 把数据从用户空间拷贝到内核缓冲区。进程 B 从内核缓冲区把数据拷贝到自己的用户空间。这个内核缓冲区就是 IPC 的核心载体。第二部分匿名管道 (Anonymous Pipe)这是 Linux 中最常见的 IPC 形式就是我们在命令行里用的竖线|。1. 原理内核中的“水管”管道在内核中本质上是一块内存缓冲区。 但 Linux 把它抽象成了文件。这意味着你可以用read和write系统调用来操作它就像操作普通文件一样。单向流动 (Half-duplex)数据只能从一端流向另一端。就像水管不能同时双向注水。面向字节流没有固定的报文格式读写次数不一定需要匹配写100字节可以分10次读每次10字节。血缘限制匿名管道只能用于有亲缘关系的进程之间父子、兄弟。为什么因为只有通过fork子进程才能继承父进程打开的文件描述符。2. 系统调用pipe()C#include unistd.h int pipe(int pipefd[2]);参数这是一个输出型参数数组。pipefd[0]读端(Reader)。pipefd[1]写端(Writer)。记忆技巧0 像嘴巴读1 像笔写。返回值成功返回 0失败返回 -1。3. 关键步骤Fork 构建通道创建管道本身并不难难的是如何让父子进程各执一端。第一步父进程创建管道父进程调用pipe此时父进程同时拥有读端和写端。fd[0] - 内核缓冲区fd[1] - 内核缓冲区第二步父进程 Fork 子进程fork之后子进程拷贝了父进程的文件描述符表 (File Descriptor Table)。重点虽然 PCB 拷贝了但它们指向的struct file文件结构体是同一个。所以子进程也有fd[0]和fd[1]指向同一个内核缓冲区。第三步关闭不需要的端口构建单向信道管道设计为单向。如果父写子读父进程关闭fd[0](读端)保留fd[1]。子进程关闭fd[1](写端)保留fd[0]。如果不关会怎样虽然也能用但会干扰 EOF文件结束的判断稍后细讲。第三部分代码实战 —— 父子对话我们写一个简单的程序父进程往管道里写字符串子进程读取并打印。#include iostream #include unistd.h #include string.h #include sys/wait.h #include sys/types.h using namespace std; int main() { // 1. 创建管道 int pipefd[2] {0}; if (pipe(pipefd) 0) { perror(pipe); return 1; } // 2. 创建子进程 pid_t id fork(); if (id 0) { perror(fork); return 2; } if (id 0) { // --- 子进程 (Reader) --- // 3. 子进程关闭写端 close(pipefd[1]); char buffer[1024]; while (true) { // 4. 从管道读取 // 如果管道没数据read 会自动阻塞等待(类似 wait 的状态) ssize_t s read(pipefd[0], buffer, sizeof(buffer) - 1); if (s 0) { buffer[s] 0; cout Child got message: buffer endl; } else if (s 0) { // 写端关闭了读端就会读到 0 (EOF) cout Writer quit, Child quit. endl; break; } else { perror(read); break; } } close(pipefd[0]); exit(0); } // --- 父进程 (Writer) --- // 3. 父进程关闭读端 close(pipefd[0]); const char *msg Hello Child, I am Father.; int count 0; while (count 5) { char out_buffer[1024]; snprintf(out_buffer, sizeof(out_buffer), %s [%d], msg, count); // 4. 写入管道 write(pipefd[1], out_buffer, strlen(out_buffer)); sleep(1); // 故意慢一点看看子进程会不会等 } // 5. 任务结束关闭写端 // 这一步非常重要关闭写端后子进程的 read 才会返回 0 (EOF) close(pipefd[1]); waitpid(id, nullptr, 0); cout Father wait success. endl; return 0; }第四部分管道的 4 种特殊情况面试重点通过上面的代码我们可以总结出管道的 4 种“脾气”这体现了进程同步的思想。写慢读快如果管道空了读端子进程会阻塞等待进入 S 状态直到有数据写入。意义管道自带同步机制不需要我们自己写代码去轮询。写快读慢如果管道满了Linux 默认 64KB写端会阻塞等待直到读端读走一部分数据腾出空间。写端关闭如果所有写端都关闭了读端read完剩余数据后会返回0(表示 End Of File)。这是子进程知道“父进程写完了”的信号。读端关闭这是一个严重的问题。如果读端关闭了写端还在拼命写操作系统会认为这是在做无用功没人读写了干嘛。OS 会向写端进程发送SIGPIPE(13号信号)直接杀死写端进程。应用你在 Shell 输cat huge_file.txt | head -n 5head读了 5 行就退出了关闭读端此时cat进程会被操作系统发信号干掉避免它继续读取巨大的文件浪费资源。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

怎么参考已有网站做新站百度公司名称

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个效率对比测试工具:1.自动记录用户使用top和htop完成相同任务的耗时 2.生成操作路径热力图 3.量化效率提升百分比。要求实现10个典型监控任务场景,输…

张小明 2026/1/3 1:39:07 网站建设

南京做网站优化公司企业建设网站对客户的好处

详见主页个人简介获取参考设计报告论文博图仿真HMI源文件PLC程序电气接线图IO表等摘 要 自动门在人们的日常生活中已经得到了广泛的应用,同时人们对其性能和安全等方面的要求也越来越高。由于 PLC 的高稳定性和对环境较强的适应能力,使得 PLC 在自动门控…

张小明 2026/1/2 21:12:25 网站建设

word网站的链接怎么做的五屏网站建设多少钱

1 前言 🚩 基于python 机器视觉 的车牌识别系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:2分 🧿 选题指导, 项目分享:见文末 1 课题背景 车牌识别其实是…

张小明 2026/1/2 19:13:18 网站建设

网站返回500错误页面中企动力做网站的优势

第一章:Open-AutoGLM系统版本兼容性挑战全景在构建和部署 Open-AutoGLM 系统时,版本兼容性问题成为影响系统稳定性和功能扩展的关键障碍。不同组件间依赖的深度学习框架、Python 解释器版本以及第三方库之间存在复杂的耦合关系,导致在多环境部…

张小明 2026/1/3 1:05:41 网站建设

wordpress多站点模式插件统计网站建设

开源TTS新星:GPT-SoVITS语音自然度评测报告 在虚拟主播直播间里,一个声音几乎与真人无异的AI正在朗读弹幕;有声书平台上,用户上传一段自己的录音,几分钟后就能用“自己的声音”读完一整本小说——这些场景不再是科幻&a…

张小明 2026/1/3 19:40:03 网站建设

网站图片怎么做优化做网站需要那些技术

你是否曾为保存网页而烦恼?精心整理的资料转眼间就变成了无法打开的乱码,重要的参考内容在几天后就消失无踪。在信息爆炸的时代,如何有效保存和管理网页内容已成为每个互联网用户的刚需。 【免费下载链接】SingleFile Web Extension and CLI …

张小明 2026/1/4 5:00:41 网站建设