linux使用cp报错 Text file busy
网络知识 2023-02-09 13:14www.1681989.comseo网站推广
我第一个想到的是可能ioctl可以检查文件。可惜我猜错了,看了一下cp的源码,原来如果一个文件正在运行,另一个进程再open以获得写权限的话,这个open本身就会失败,返回-1,errno为ETXTBSY。
那么cp -f 为什么又可以?因为cp -f会先把目标文件(要被覆盖的文件)删掉,然后将源文件rename为目标文件名。
从内核代码看,当运行一个二进制文件时
sys_execve()
do_execve()
open_exec()
deny_write_aess()
这里的deny_write_aess会把文件对应ode的i_writecount成员减1,通常i_writecount的值就变成-1了(初始为0)
这时候再有进程想以写模式open
do_sys_open()
do_filp_open()
path_openat()
do_last()
nameidata_to_filp()
__dentry_open()
__get_file_write_aess()
get_write_aess()
get_write_aess会发现ode的i_writecount成员为负数了,所以直接返回 -ETXTBSY
网络推广
- 5g网络有多快:5g网络网速有多快
- dota2无法连接至steam网络 为什么无法连接dota2网络
- 无线网络信号接收器 无线网络信号接收器怎么用
- 网络延时是什么意思 网络延时是什么原因
- 无线网络不可用:无线网络不可用是什么原因
- 网络广告销售技巧 网络广告销售技巧有哪些
- 智能手机网络设置 智能手机网络设置在哪里
- 为什么找不到无线网络 为什么找不到无线网络信
- 网络这么赚钱:网络怎么能赚到钱
- 为什么无线网络连接不上 为什么无线网连不起来
- 网络上的人际交往 网络上人际交往的优势
- 支付宝网络系统异常 支付宝显示网络异常什么时
- 营销软件:营销软件有哪些
- 无法访问您要使用的功能所在的网络位置
- 网络安全基本知识 网络安全基本知识有哪些
- 什么网络电话最好用 什么网络电话最好用最便宜