zoukankan      html  css  js  c++  java
  • 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结构体。所以每个进程中的当前文件偏移量也是独立的,互不影响。但是和单进程中不同的是,多进程中由于各个进程之间是并发执行的,所以操作的顺序是不确定的,而单进程中操作的顺序是确定的。
  • 相关阅读:
    CentOS 6、CentOS 7系统设置防火墙及使用区别
    HAProxy 使用小记
    oracle快速创建用户、imp/exp导入导出dmp文件
    $@和$*的作用和区别
    根据命令行输出key-value键值对
    mysql备份
    mysql大表归档后清理数据
    redis数据修复记录-1
    redis数据修复记录-2
    调整mysql路径
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9349836.html
Copyright © 2011-2022 走看看