• Linux文件共享(单进程之间、多进程之间)


    转载:https://www.cnblogs.com/frank-yxs/p/5925603.html
    在同一个进程中,实现文件共享的方法有两种:
    • 多次使用open函数打开相同文件
    • 使用dup/dup2函数或者fcntl函数
    ========================================================
    对于第一种方法:
        每次使用open函数打开文件时,操作系统内核中都会创建一个不同的文件表项(struct file结构体),但是这些不同的struct file结构体最终都会指向同一个struct inode结构体,因为一个文件只能对应唯一的一个struct inode结构体。
        由于每次open都会创建不同的struct file结构体,也就是说不同的文件描述符对应着不同的文件表项(struct file结构体)。所以在操作不同的文件描述符时,都有各自独立的当前文件偏移量,互不影响。
        举个例子,进程中使用open两次打开了同一文件,得到了文件描述符 fd1 和文件描述符 fd2 接着向 fd1 中写入了一部分数据,fd1 的当前文件偏移量被更新。然后再向 fd2 中写入数据时,由于此时 fd2 的当前文件偏移量仍处在文件开头,所以写入的数据会覆盖了先前向 fd1 中写入的数据。
    对于第二种方法:
        在介绍dup/dup2函数或者fcntl函数的笔记中再详解介绍。这种方法和第一种方法是有本质区别的。
    =======================================================
    在多个进程中,实现文件共享:
        在不同的进程打开相同的文件和在同一进程使用open多次打开同一文件类似,操作系统都会建立不同的文件表项(struct file结构体),而最终指向同一个struct inode结构体。所以每个进程中的当前文件偏移量也是独立的,互不影响。但是和单进程中不同的是,多进程中由于各个进程之间是并发执行的,所以操作的顺序是不确定的,而单进程中操作的顺序是确定的。
  • 相关阅读:
    删除名字和参数
    更改NX TITLE为路径
    我自己写的创建刀具
    创建刀具,很有用的信息
    控件改名
    已知体的最大尺寸在一堆实体里面找这个体
    cam对象类型
    ORACLE导入导出工具的使用
    ORACLE表空间
    Statement与PreparedStatement的区别
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9349836.html
Copyright © 2020-2023  润新知