关于linux中进程打开同一文件操作的一点分析

关于linux中进程打开同一文件操作的一点分析

按照系统的设计,每个进程自己维护一张打开表
 索引  文件描述符     文件指针
 0      close_on_exec   0x.....
 .............
然后内核会维护一张表,这个表表示所有打开的文件,每个文件一行不会重复。
里面存储有文件的当前状态,也就是为什么有进程锁定后,其他进程不能写。状态值就是写在这里的。
然后内核说虽然多个进程打开同一文件仅仅是指向了同一个索引位置,但是每个进程却有自己独立的偏移。
于是我做了2个测试。
1)父子进程之间
2)无关联的2个进程之间
-------------------------------------------------------------
代码如下:
 1 #include "apue.h"
  2 #include <fcntl.h>
  3
  4 int main(void)
  5 {
  6  int fd;
  7  off_t off = 0;
  8  pid_t pid = 0;
  9  const char * file = "add2";
 10  fd = open(file, O_RDONLY);
 11  off = lseek(fd, 10, SEEK_CUR);
 12  printf("current process %d, offset %d\n", getpid(), off);
 13  sleep(100);
 14 /* pid = fork();
 15  if ( pid > 0)
 16  {
 17    waitpid(pid);
 18    off = lseek(fd, 0, SEEK_CUR);
 19    printf("current process %d, offset %d\n", getpid(), off);
 20    exit(0);
 21  }
 22  else if ( pid == 0)
 23  {
 24   printf("current process %d, offset %d\n", getpid(), off);
 25  off = lseek(fd,10, SEEK_CUR);  
 26  sleep(5);
 27  } */
 28  return 0;



----------------------------------------------------------------------
结论:
情况1 父子进程之间  文件偏移像是一个共享的字段,不论谁修改了读取的都是最新的值,可能原因是子进程复制了父进程所有东西的时候,有的还不是完全复制
情况2 不同进程之间  结论成立,每个进程即便是打开了同一文件,仍然有自己独立的文件偏移
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值