fork文件共享和多次open同一个文件

上图结构体名字和属性不对,正确的如下:

其中驱动程序的open函数的struct file *file参数就是这里的struct file

fork后父子进程对已经打开文件的共享:

子进程会复制父进程的文件指针,所以指向相同的文件表(struct files),操作的是同一个偏移量,所以父子进程操作已经打开的文件时需要同步,否则会产生混乱;另外,file中有一个引用计数,表示指向这个file结构体的进程数量,当使用这个file结构体的所有进程全部调用了close()后,驱动的release函数才会被调用(当一个进程终止时,内核对该进程所有尚未关闭的文件描述符
调用close关闭,所以即使用户程序不调用close,在终止时内核也会自动关闭它打开的所有文件,单最好手动调用close)

同一个进程中多次打开同一个文件,会返回不同的文件描述符,内核会实例化不同的文件表,具有不同的偏移量:


版权声明:本文为qq_41468222原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。