Linux使用CP报告错误的文本文件。

Linux使用CP报告错误的文本文件。
注释:一位同事问我:当使用CP命令时,如果发现要覆盖的文件(二进制可执行文件)正在运行,CP会出错。CP命令如何知道文件正在执行
我想到的第一件事就是ioctl可以检查文件。不幸的是,我猜错了。我看了看源代码,原来,如果一个文件正在运行另一个过程又是开放的,为了获得写权限,开放本身将失败并返回1,错误是etxtbsy。

那么为什么F - F可以恢复正常呢因为CP - F会首先删除目标文件(要覆盖的文件),然后将源文件重命名为目标文件名。

在运行二进制文件时,从内核代码

sys_execve()

do_execve()

open_exec()

deny_write_access()

这里的deny_write_access减小文件的inode的i_writecount成员1,对i_writecount值变为1(初始0)。

此时,进程希望打开模式:

do_sys_open()

do_filp_open()

path_openat()

do_last()

nameidata_to_filp()

__dentry_open()

__get_file_write_access()

get_write_access()

get_write_access会发现inode的i_writecount成员是消极的,所以他们直接返回到etxtbsy

tag:错误文本文件报告电脑软件Linux

相关内容