系统相关
首页 > 系统相关> > Linux中的文件管理与实现原理---UNIX环境高级编程第三章心得

Linux中的文件管理与实现原理---UNIX环境高级编程第三章心得

作者:互联网

如何通过文件I/O函数操纵文件?

对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读、些一个文件时,使用opencreat返回的文件描述符标识该文件,将其作为参数传送给readwrite。另外可以通过lseek函数调整读或写的位置。当不想使用时,可以使用close函数关闭。关于每个函数的具体的使用请参考man 文档
熟练使用以上函数可以很好的处理的文件。那是不是就结束了呢?思考以下问题

  1. 多个进程可以同时打开同一个文件吗?此时他们的文件描述符是不是一样的?每个进程对文件进行读写的时候其他进程可以感知到吗?可以同时在同一个位置写入数据吗?将文件描述符发送给其他进程是不是可以共享文件描述符?
  2. 同一个进程是否可以用不同数值的文件描述符操作同一个文件?
  3. 为什么文件可以重定向?重定向的原理?

内核用于所有I/O的数据结构

想要知道上面问题的答案,需要先介绍内核用于所有I/O的数据结构。
内核使用3种数据结构表示打开文件,它们之间的关系决定了文件共享方面一个进程对另一个进程可能产生的影响。

了解了内核中的这些数据结构,就可以解决上述问题。

  1. 多个进程可以同时打开同一个文件吗?此时他们的文件描述符是不是一样的?每个进程对文件进行读写的时候其他进程可以感知到吗?可以同时在同一个位置写入数据吗?将文件描述符发送给其他进程是不是可以共享文件描述符?

可以打开同一个文件,文件描述符的值可能会一样,有可能不一样。但是一般情况下,文件描述符中的文件表项指针不一样。 一般情况下某个进程读写时,其他进程感知不到,因为每个文件表项都维护自己的当前文件偏移量。 可以在同一个位置写数据但是会覆盖掉其中一个。 单纯将文件描述符的值发送给其他进程无法共享文件描述符,只有将文件表项指针发送给对方才可以共享文件描述符。

  1. 同一个进程是否可以用不同数值的文件描述符操作同一个文件?

可以

  1. 为什么文件可以重定向?重定向的原理?

多个文件描述符指向同一文件表项即是文件重定向。

UNIX也提供了一些函数来使用和管理上述的三个结构。
dupdup2 函数可以复制文件描述符。
fcntl函数可以获取和修改文件描述符标志和文件状态标志。
具体函数使用和功能看man文档
对 i-node表项的获取和修改将在第四章学习。

参考链接:
https://www.jianshu.com/p/cded914786d5

标签:文件,表项,同一个,指向,描述符,---,UNIX,Linux,进程
来源: https://www.cnblogs.com/yangrz121/p/16513681.html