Linux进程的共享文件

【C语言】进程通信-共享文件 进程1创建共享文件 代码 #include <sys/ipc.h> #include <sys/types.h> #include <sys/shm.h> #include <stdio.h> #include <string.h> #include <unistd.h> //int shmget(key_t key, size_t size, int shmflg); int main() { char *s 阅读详情

一、内核中打开文件共享机制分析

当我们运行一个进程的时候, 我们需要打开一个其他的文件进行IO操作, 但是那么问题就来了, 这个文件在一个进程中是以什么样的形式来表达么??

目前根据我了解到 , 有两种表达形式。

1、 第一个是文件指针的形式,。

2、第二种是文件描述符的形式。


以下我们将会重点讨论文件描述符号:

当我们运行某个进程的时候时候, 内核将会使用三种数据结构表示打开文件, 他们之间的关系可以决定一个文件在文件共享机制中的同步异步关系?

1)、进程表项---结构

a、文件描述符标志

b、文件表项指针

2)、文件表项结构

a、文件状态标志(读、写、填写、同步异步和非堵塞等操作)

b、当前文件偏移量

c、v节点指针

3)、v节点表项

a、v节点信息

b、v_data


以下是进程中打开文件在内核中的数据结构抽象数据图:




二、dup和dup2函数

int dup(int fd);
int dup2(int fd, int fd2);
       //若成功则返回新的文件描述符, 若出错则返回-1 

1、dup函数

dup函数是在当前可用的文件描述符中找出最小值的。

2、dup2函数

dup2函数是把fd2的文件描述符指向与fd文件描述符号表示的相同的文件。但若是fd2 = fd, 那么直接返回, 将没有任何变化。 但是若是fd2是已经打开的文件描述符好则将会先关闭fd2文件描述符号, 在指向fd文件描述符表示的文件。

dup(fd) 等效于: 
fcntl(fd, F_DUPFL, 0);

dup2(fd, fd2) 等效于
close (fd2);
fcntl(fd, F_DUPFL, fd2);

例如:

fd1 = open(path, oflags);
fd2 = dup(fd1); 
fd3 =open(path, oflags);
分析fd1,fd2,fd3的打开文件在内核中的数据结构图?(答案见改文章结尾)

F_SETFD 和F_SETFL 对文件描述符号的影响?

F_SETFD 主要是影响进程表项的文件描述符号标志

F_SETFL 主要是影响文件表项的文件状态标志


三、总结

1、了解打开文件在内核中的三种数据结构和共享机制。

2、熟练了解dup和dup2的原理

3、了解F_SETFD 和F_SETFL在内核中作用已打开文件的三种数据结构的哪一个对象?


答案


IPC之十:使用共享文件进行进程间通信的实例 IPC 是 Linux 编程中一个重要的概念,IPC 有多种方式,常用的 IPC 方式有管道、消息队列、共享内存等,但其实使用广大程序员都熟悉的文件也是可以完成 IPC 的,本文介绍如何使用共享文件实现进程间通信,本文给出了具体的实例,并附有完整的源代码;本文实例在 Ubuntu 20.04 上编译测试通过,gcc版本号为:9.4.0;本文的实例中涉及多进程编程、文件锁等概念,所以对 Linux 编程的初学者有一些难度,但对于了解 Linux 下共享文件,特别是文件锁的应用,将是非常难得的。 阅读详情

相关推荐

Linux_进程间通信 共享内存shmget方式详解

Linux_进程间通信_-_共享内存shmget方式

Linux 文件共享(两种方法)

快速掌握Linux文件共享(共享文件夹)的两种方法。 法一通过在/mnt/hgfs下挂载共享文件夹实现,法二通过Samba共享协议实现。

m0_59302403的博客 6万+

中文顶刊《会计研究》文本分析技术最新进展总结盘点

会计研究》是由中华人民共和国财政部主管、中国会计学会主办的国家一级学术期刊,为会计领域中文顶级期刊。随着大数据技术的日益成熟, 社交网络类文本 、上市公司披露类文本、媒体报道类文本、 其他类文本 、网络搜索数据、P2P 网络借贷文 本与分析师报告等文本数据逐渐成为财务会计的研究素材。

qq_52891550的博客 2891

【Linux】进程间通信方式②——文件共享映射(附图解与代码实现)

我们来简单了解下文件共享映射的定义:通过映射文件,使用映射机制,实现资源共享,完成进程通信具体是如何实现的呢?跟随着这篇博客,我们来看一看。

m0_53133879的博客 817

HFSS入门 - 传输线线路损耗和串扰仿真

下图中两相近传输线存在端口间的串扰,而同一根传输线存在线路损耗。 我们可用S21描述端口1到端口2的线路损耗(插损?),用S13描述近端串扰,S24描述远端串扰,串扰通常要求-20dB以下。 实验目的:传输线线路损耗和串扰仿真 具体步骤: 1.草图: 其中板厚Subh为1mm。其余参数具体值如下: 2.由草图作图: 其中介质板表面设为GND。 3.设置激励:先在第一根传输线相连的XZ平面上做一...

qq_37274411的博客 9156

100个Python代码大全:学完这篇从Python小白到架构师

Python是一种广泛使用的高级编程语言,以其简洁优雅、易于学习和强大的库而闻名。无论你是一位经验丰富的程序员还是初学者,都可以从这种语言的丰富资源中受益。在本篇博客中,我将分享100个实用的Python代码示例,旨在帮助你掌握Python编程,并在日常工作中提高效率。

penggerhe的博客 1万+

【Linux】进程间通信——共享内存

例2:进程A从键盘循环获取数据并拷贝到共享内存中,进程b从共享内存中获取并打印数据。要求进程a输入一次,进程b输出一次,a不输入,b就不输出。一般给0代表可读可写,可以给SHM_RDONLY 为只读模式,其他为读写。例1:进程A向共享内存写入数据,进程B从共享内存中读取数据并显示。A(./main)未输入时,B(./test)不输出(阻塞着)而输出的时候一直输出S内的数据,没有控制,会一直循环输出。正确流程是写入一次读取一次,不写入不读取。A输入end,A,B退出。A输入一个,B读取一个。

qq_53830608的博客 2032

【NLP】第10章 使用基于 BERT 的 Transformer 进行语义角色标记

Transformers 在过去几年里取得的进步比上一代 NLP 还要多。标准 NLU 方法首先学习句法和词汇特征来解释句子的结构。在运行语义角色标签( SRL )之前,将训练以前的 NLP 模型理解语言的基本语法。Shi和Lin(2019)在他们的论文开始时询问是否可以跳过初步的句法和词汇训练。基于 BERT 的模型可以在不经过那些经典训练阶段的情况下执行 SRL 吗?答案是肯定的!Shi和Lin (2019) 建议 SRL 可以被视为序列标记并提供标准化的输入格式。他们基于 BERT 的模型产生了令人惊

sikh_0529的博客 7374

Linux下文件共享的几种方式

平常工作中你的电脑通常不是网络上唯一的计算机,如果你在工作环境中,情况尤其如此。当我们想要将数据从一台机器传输到另一台机器时,有时连接一个U盘并手动复制它们可能更容易。但在大多数情况下,如果您使用同一网络上的机器,则传输数据的方式是通过网络文件共享来的更方便些或更显示些。下面,我们将介绍几种不同的方法来在网络上的不同机器之间复制数据。我们将讨论一些简单的文件副本,然后我们将讨论如何将整个目录挂载到你的机器上,作为一个单独的驱动器。一个简单的文件共享工具是scp命令。

公众呺:Linux兵工厂, 加关+私信获取海量Linux干货资料和代码 4877

银河麒麟桌面系统 必会操作 | 加装双系统(麒麟桌面系统+Windows系统)的详细方法(含常见故障和解决方法)

装好麒麟桌面操作系统的电脑上、再加装Windows 操作系统的详细方法;和在已经装好Windows系统的电脑上、再加装麒麟桌面操作系统的详细方法;含加装双系统过程中常见问题的解决方法。

qq_33216613的博客 2410

AutosarMCAL开发——基于TC3x系列时钟系统浅析

本文为博主个人学习总结记录,如有不正,欢迎指正。

qq_45583706的博客 888

linux实现文件共享的方式,Linux文件共享的实现方式

前两天跟老师去北京开了一个会议,好久没学习了,今天才回学校,其中的辛酸就不说了。来正文:1、什么是文件共享(1)、文件共享就是同一个文件(同一个文件指的是同一个inode,同一个pathname)被多个独立的读写体(几乎可以理解为多个文件描述符)去同时(一个打开尚未关闭的同时,另一个去操作)操作。(2)、文件共享的意义有很多:例如我们可以通过文件共享来实现多线程同时操作同一个大文件,以减少文件读写...

weixin_27388739的博客 3293

MATLAB地理数据处理 25:植被物候提取及分析模型优化(Savitzky-Golay)

之前我写过一篇使用Savitzky-Golay处理遥感数据,获取地面物候信息的MATLAB代码,但是发现存在一些问题:对物候开始期和物候结束期的阈值设定都为相同值,但是有些研究中,需要根据不同的环境条件,设置不同的物候阈值,所以对其进行相应的修改。

amyniez的博客,欢迎交流讨论 2233

Linux下父子进程是否共享文件

我们每次打开文件以后,会产生struct file这样一个结构体在内核中,用来表示打开的这个文件,记录着文件偏移量(起始从0开始,随着写入数据进行偏移),引用计数(几个进程都在使用这个打开的文件),inode节点(存放进程的属性信息:谁创建了,名字是什么,在磁盘哪里存储。,子进程的 PCB 中的文件表指向打开文件的指针只是拷贝了父进程 PCB 中的值(浅拷贝),所以父子进程会共享父进程 fork 之前打开的所有文件描述符,引用计数变为2。,我们再打开一个文件,文件描述符的值就是3,以此类推下去。

ljy的博客 346

C#串口通信上位机开发实战:轻松实现硬件控制与数据交互

摘要:本文介绍如何使用C#开发串口通信上位机应用,实现与硬件设备(如传感器、PLC等)的数据交互。文章涵盖串口通信原理、开发环境配置、功能实现(串口连接管理、数据收发、实时显示)及UI设计,重点讲解SerialPort类的应用、多线程数据接收处理和错误优化。通过Windows Forms构建直观界面,帮助开发者快速掌握工业控制和自动化系统中的串口通信技术,为物联网和智能设备开发提供实用解决方案。全文约150字。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3029

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

linux 父子进程共享,父子进程经过共享文件描述符,同时读写同一文件

父子进程通过共享文件描述符,同时读写同一文件父进程首先打开一个空文件,然后调用fork创建子进程。子进程向文件写入“databuffer”,结束。父进程从文件中读取数据,但失败。总是读不到子进程已经写入到文件中的数据。代码如下。#include#include#include#include#includeintmain(intargc,char**argv){pid_tpid...

weixin_39966602的博客 1176

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

linux 下进程间通讯: 共享文件

共享文件算是比较传统的进程间数据交换的一种方式,但是由于涉及到不同进程间反复文件I/O,难免显得有些效率低下。共享文件的本质,实际是就是某个进程向共享为念写入数据,一个或多个进程从文件中读取数据,有可能涉及到进程之间资源竞争的问题,这里就涉及到了使用文件锁。 部分代码源于《Linux中国》 一、生产者代码示例 /******************************* ** 生产者 *****************************/ #include <...

Mr.Sugarcane 1021

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Linux 下的进程间通信:管道、消息队列、共享文件、共享内存

Table of Contents 无名管道 命名管道 消息队列 共享文件 示例 1. 生产者程序 示例 2. 消费者程序 共享内存 示例 3. memwriter 进程的源程序 示例 4. memreader 进程的源代码 本篇是 Linux 下进程间通信(IPC)系列的第二篇文章。第一篇文章聚焦于通过共享文件和共享内存段这样的共享存储来进行 IPC。这篇文件的重点将转向管...

RToax 1357

Linux & OS——进程/线程管理(一):进程-进程间通信-共享内存/共享文件

Linux & OS——进程/线程管理(一):进程-进程间通信-共享内存/共享文件 共享内存 共享文件

weixin_42923076的博客 158

95-探究Linux下父子进程是否共享文件

父进程先打开一个文件,fork 后子进程是否可以共享使用? 首先书写头文件 运行后如下图 由于 fork 创建的子进程的 PCB 是拷贝父进程的,子进程的 PCB 中的文件表指向打开文件的指针只是拷贝了父进程 PCB 中的值,所以父子进程会共享父进程 fork 之前打开的所有文件描述符 父子进程都执行close,才算彻底关闭文件。父进程执行close,子进程依旧可以访问文件。子进程执行close,父进程依旧可以访问文件。 如果先执行fork 再打开文件来读取 那么执行结果是 原因如下所示示意图

LINZEYU666的博客 777

linux 对父子进程共享文件描述符的理解

父子进程共享文件描述符 相当于2个fd指向同一块内存空间. 因为2个进程共享了文件指针偏移量,所以都能向文件中有序写数据 如果一个进程打开了一个文件以后,创建子进程,子进程会继承父进程的环境和上下文中的大部分内容,包括文件描述符。此时父子进程享有相同的文件偏移量,执行相同的程序读取文件中的字符。程序执行结果是随机的,可能是父进程先读,产生一个偏移,再由子进程读其相邻字符,也可能结果相反。 例子: #include <stdio.h> #include <fcntl.h> //包含O

ShenHang_的博客 4217

Linux系统编程——父子进程之间是否共享文件

父子进程之间是否共享文件 问,父子进程之间是否共享文件 答,共享 ( 注意,是共享fork之前的) //父子进程之间是否共享文件 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <errno.h> #include <unistd.h> int m

mirana的专栏 294

Linux创建进程

【代码】Linux创建进程。

weixin_46371062的博客 161

进程间通信的7种方式:共享文件、管道、消息队列、共享内存、套接字(附测试代码)

Linux进程间通信几种方式总结 面试过程中Linux进程间通信作为基础知识经常会被问道,今天就在这里总结一下。Linux进程间通信常用的有7种,分别是1共享文件、2匿名管道pipe、3有名管道fifo、4消息队列、5共享内存、6信号量、7套接字Socket。现在我们就每种的使用方式和特点简单总结一下。详细代码 https://github.com/Kunpeng1989/IPC 也可关注...

Shayne_Li的专栏 3364

CSAPP第十章系统级I/O共享文件

上一篇博客写的是关于父子进程以及fork的一些程序的分析,主要涉及到了Signal这个概念。这篇博客对应的内容是CSAPP的第十章,很有趣但是dup2的用法也和父子进程有异曲同工之妙

m0_46407319的博客 249
上一篇: malloc函数和calloc函数的区别
下一篇: 简单工厂模式
xiaomiCJH
博客等级 码龄10年 10粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值