传统管道,匿名管道

news2024/9/22 17:37:16

二、传统的进程间通信-管道文件
    管道是UNIX系统中最古老的进程间通信技术,古老意味着所有系统都支持,早期的管道是半双工通信,现有的系统管道是全双工通信
    管道就是一种特殊的文件,数据在文件中是流动的,读取之后就自动消失,如果文件中没有数据则会阻塞
    有名管道:基于有文件名的管道文件的通信
        编程模型
            进程A               进程B
          创建管道             
          打开管道              打开管道
          写数据                读数据
          关闭管道              关闭管道 
          删除管道
        
        创建有名管道文件:
        1、命令 mkfifo
        2、函数
        int mkfifo(const char *pathname,mode_t mode);
        功能:创建有名管道
        pathname:管道文件路径
        mode:管道文件权限 0664

测试结果如下:

1. **使用 fgets 读取输入**:这样可以安全地读取一行输入,避免了缓冲区溢出的问题。 2. **去掉末尾的换行符**: buf[strcspn(buf, "\n")] = '\0'; 这行代码将输入中的换行符替换为字符串结束符,以便后续处理。

2.scanf 函数在默认情况下使用空格、换行符和制表符作为分隔符,因此它不会读取包含空格的字符串。具体来说,当你使用 %s 格式说明符时, scanf 只会读取到第一个空格为止,之后的内容会被忽略。例如:

1.    匿名管道:
        只适合通过fork创建父子进程之间使用
        int pipe(int pipefd[2]);
        功能:创建一个匿名管道文件
        通过pipefd返回该匿名管道文件的读权限fd和写权限的fd
        pipefd[0]   用于读匿名管道
        pipefd[1]   用于写匿名管道
        编程模型:
            父进程              子进程
            获取一对fd
            创建子进程          拷贝\共享一对fd
            关闭读              关闭写
            写数据              读数据
            关闭写              关闭读

#include <stdio.h>
#include<sys/ipc.h>
#include<sys/types.h>
int main(int argc,const char* argv[])
{
	
	//创建内存空间
	int	shmid=shmget(ftok(".",110),4096,IPC_CREAT|0664);
	if(shmid<0)
	{
		perror("shmget");
		return -1;
	}
	//映射共享内
	char* shm=shmdt(shmid,NULL,0);
	if(shm==(void *)-1)
	{
		perror("shmat");
		shmctl(shmid,IPC_STAT,NULL);
		return -1;
	}
	pid_t pid=0;
	printf("");
	scanf("%u",&pid);
	//写数据并通知其他进程
	for()
	{
		printf(">>>");
		//向shm(内存)中写入
		scanf("%s",shm);
		kill(pid,);
		if(0==strcmp("quit",chm))
		{
			printf("通信结束\n");
			break;
		}
	}
	

	return 0;
}

测试结果:

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

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

相关文章

webshell绕过样本初体验

目录 一&#xff1a;前景 二&#xff1a;样本 样本一&#xff1a; 样本二&#xff1a; 样本三&#xff1a; 样本4&#xff1a; 样本5&#xff1a; 一&#xff1a;前景 在我们日常的网站中百分之一百是存在一些安全设备来拦截我们的webshell的&#xff0c;一般情况…

苹果手机微信恢复聊天记录分享:3个恢复方法,学到就是赚到

Q&#xff1a;我微信里面的聊天记录都不见了怎么办呀&#xff1f; A&#xff1a;问我你就是问对人了&#xff0c;我这里有3个超好用的微信恢复聊天记录的方法&#xff0c;不管你的聊天记录是被误删的&#xff0c;还是由于其他的原因导致丢失&#xff0c;在这3个方法中&#xf…

人工智能 | MetaLlama 大模型

llama 大模型介绍 我们介绍 LLaMA&#xff0c;这是一个基础语言模型的集合&#xff0c;参数范围从 7B 到 65B。我们在数万亿个 Token 上训练我们的模型&#xff0c;并表明可以专门使用公开可用的数据集来训练最先进的模型&#xff0c;而无需诉诸专有的和无法访问的数据集。特别…

车牌数据集车辆数据集,全手工labelimg标注 图片清晰用于训练效果很好

车牌数据集车辆数据集&#xff0c;全手工labelimg标注 图片清晰用于训练效果很好 车牌及车辆检测数据集介绍 数据集概览 本数据集旨在为车牌识别和车辆检测任务提供高质量的训练素材。数据集完全由人工使用LabelImg工具进行标注&#xff0c;确保了标注的准确性与一致性。图…

【容器安全系列Ⅴ】- Linux强制访问控制:AppArmor 和 SELinux

在本系列中&#xff0c;我们介绍了各种安全层&#xff0c;这些安全层不仅可以将容器与主机上的其他进程隔离开来&#xff0c;还可以将容器与其底层主机隔离开来。在这篇文章中&#xff0c;我们将讨论 AppArmor 和 SELinux 如何在我们之前讨论过的其他隔离层之外提供额外的限制。…

PDF的4大限制功能详解:如何保护你的文件?

PDF是我们工作中常用的文件格式之一。有时候&#xff0c;为了保护文件的内容或使用权限&#xff0c;我们需要对PDF文件进行某些限制。通过PDF编辑器&#xff0c;可以对PDF文件设置限制保护&#xff0c;下面介绍4种常见的限制功能&#xff0c;一起来看看吧。 限制功能一&#xf…

推荐大模型面临的严峻挑战

一、技术瓶颈 &#xff08;一&#xff09;可靠性与幻觉问题 大模型在运行过程中有时会出现事实性错误&#xff0c;这便是可靠性问题&#xff0c;也被称为 “幻觉”。例如&#xff0c;它可能会弄错诗词作者&#xff0c;给出错误的文学知识。这种错误并非个例&#xff0c;而是在…

面试必备:熟悉Spring MVC工作流程,掌握Spring MVC常见注解

一、SpringMvc 基础知识点 1. Spring MVC概况 1.1 如何理解Spring MVC 大家都知道Spring MVC很强大&#xff0c;胡广问大家一个问题&#xff0c;Spring MVC为什么会出现&#xff1f;一项技术的出现必定是为了解决旧技术考虑不全所积累的软件熵。《程序员修炼之道》在软件的熵…

PTA整数的分类处理

作者 陈越 单位 浙江大学 给定 N 个正整数&#xff0c;要求你从中得到下列三种计算结果&#xff1a; A1 能被 3 整除的最大整数A2 存在整数 K 使之可以表示为 3K1 的整数的个数A3 存在整数 K 使之可以表示为 3K2 的所有整数的平均值&#xff08;精确到小数点后 1 位&…

0901作业+思维导图梳理

一、作业 1、代码 #include <iostream> #include <string.h> #include <stdio.h> using namespace std; class Mystring { public://无参构造Mystring():size(128),len(0){str new char[size];cout<<"无参构造完成"<<endl;}//有参构…

Git之2.35版本重要特性及用法实例(六十三)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者. 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列…

版本控制系统Git/Gitlab/GitHub

版本控制系统 git和svn:公司内部的代码仓库&#xff0c;用于存放项目代码&#xff0c;方便整合开发过程 公共代码仓库&#xff1a;github全球 gitee国内 git 分布式 ---没有中心代码库&#xff0c;所有机器之间的地位同等&#xff08;每台机器上都有相同的代码&#xff09; …

【C++ 面试 - STL】每日 3 题(三)

​ ✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

2024年8月——大模型更新汇总

让我们来看一下8月份有哪些大模型更新&#xff0c;涵盖了多个领域&#xff0c;包括语言模型、视觉模型以及数学模型等。以下是本次更新的主要亮点&#xff1a; 1、 智谱系列升级&#xff1a; a、GLM-4-Flash&#xff1a;免费供应&#xff0c;提供快速响应的对话体验。 b、GLM-4…

Linux--网络指令UDP,TCPwindows连接服务器

网络指令 ping命令 用来检测网络连通性的。 比如ping 百度的官网 ping www.bai.com 这个指令执行后默认是不会停下来的&#xff0c;我们可以加入 -c 数字选项&#xff0c;表示要ping几次 比如ping两次 ping -c2 www.bai.com netstat 查看所有的网络连接活动 netstat…

《云原生安全攻防》-- K8s攻击案例:高权限Service Account接管集群

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 在本节课程中…

提高编程效率的秘密武器:探索高效开发工具

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《热点时事》 期待您的关注 目录 引言 一、工具介绍 Visual Studio Code (VS Code) Docker GitHub 二、效率对比 三、未来趋…

详细解说一下Python中的递归和基例

大家好&#xff0c;感谢阅读胡萝卜不甜的文章&#xff0c;谢谢你的关注和点赞。好戏马上开始 考点&#xff1a; 递归函数是一种在函数定义中调用自身的函数。递归函数通常包含两个主要部分&#xff1a;递归部分和基例&#xff08;也称为递归终止条件&#xff09;。 递归部分&am…

给你的头像加个口罩网站html源码

源码介绍 给你的头像加个口罩网站html源码&#xff0c;html网页源码&#xff0c;直接打开即可使用&#xff0c;也可以上传到网站。 效果预览 源码获取 给你的头像加个口罩网站html源码

【亚马逊运营经验帖】跨境选品9大实操策略,小白必看!

一个新手卖家要想在亚马逊这个庞大的平台上分得一杯羹&#xff0c;不深入了解一些选品的技巧恐怕是不行的。七分靠选品&#xff0c;三分靠运营。可见选品的成功与否对于一个 listing 能否快速爆单至关重要&#xff0c;这篇文章是从帮助小白的角度去分析选品的一些基本思路。 1…