两个进程同时操作文件

当两个进程打开同一个文件,同时对该文件做了写操作的时候,是否会将各自的操作记录留在属于自己的操作记录里面,等到两个进程的写操作结束时再将原文件做修改,就像docker对镜像的修改是逐层叠加的一样。
全部评论
如果多个进程都需要将数据添加到某一文件,那么为了保证定位和写数据这两步是一个原子操作,需要在打开文件时设置O_APPEND标志。   ------------APUE 但是就算开启 O_APPEND 标志,write 也不一定是一个原子操作---当写入文件的字符数大于一个阈值时,不保证写入原子性(一般是一个page的大小)
点赞 回复 分享
发布于 2016-09-06 12:34
这跟操作系统和文件系统有关,以linux为例,每个进程使用文件描述符来表示每个进程打开的文件,每个文件描述符表可以对应相同的file实例,file实例指向inode,inode与address space一一对应,其中address space跟我们平时的读写操作息息相关,他维护了磁盘的文件内容在内存里的页缓存,为了提高效率,读写一般发生在页缓存一层,直到需要flush(可能是用户发起的sync操作,也可能是内存紧张需要换出页)。回到楼主的问题, 是否会将各自的操作记录留在属于自己的操作记录里面,  一般而言不会,只要你使用了sys_read,文件系统一般会把他写到页缓存里,这是遵循一般文件系统的规则的,但也不排除某些文件系统为每个进程创建了一个类似“address space”的数据结构,但这个结构不是在vfs层的,实际上linux vfs层也存在一个inode 层次的锁,可以保证每次调用sys_read的互斥。要想在进程层次保持互斥,可以使用flock
点赞 回复 分享
发布于 2016-09-06 14:18

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务