Linux Cp 忽略报错信息,linux使用cp报错 Text file busy
生活随笔
收集整理的這篇文章主要介紹了
Linux Cp 忽略报错信息,linux使用cp报错 Text file busy
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我第一個想到的是:可能ioctl可以檢查文件。可惜我猜錯了,看了一下cp的源碼,原來如果一個文件正在運行,另一個進程再open以獲得寫權限的話,這個open本身就會失敗,返回-1,errno為ETXTBSY。
那么cp -f 為什么又可以?因為cp -f會先把目標文件(要被覆蓋的文件)刪掉,然后將源文件rename為目標文件名。
從內核代碼看,當運行一個二進制文件時
sys_execve()
do_execve()
open_exec()
deny_write_access()
這里的deny_write_access會把文件對應inode的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_access()
get_write_access()
get_write_access會發(fā)現(xiàn)inode的i_writecount成員為負數(shù)了,所以直接返回 -ETXTBSY
總結
以上是生活随笔為你收集整理的Linux Cp 忽略报错信息,linux使用cp报错 Text file busy的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux ftp非隔离模式,FTP实验
- 下一篇: vi执行Linux命令,如何从Vim中访