Linux:让一个进程失败,如果它确实打开一个文件进行写入

Linux: let a process fail, if it does opens a file for writing

我希望命令行工具在打开特定文件进行写入时失败。

有没有办法修改命令行工具的环境(可能通过 cgroups),以便 command/process 获得(例如)“权限被拒绝”?

chmod a-w file 不起作用。该过程似乎unlink()然后重新创建文件。

我知道我可以使用 strace 观察进程的系统调用。但是有没有办法改变一些调用,使过程得到不同的结果?

背景:单元测试

strace 有一个名为 -e inject 或简称为 --inject 的选项,可用于更改被跟踪者的系统调用。 (See manpage here)

特别是,in 可以与 -P 选项结合使用,以仅跟踪访问指定路径的系统调用。

由于调用是按照从共享库加载的顺序进行的,因此您可以使用 LD_PRELOAD 在系统库之前加载自定义库并劫持它们的执行。这被许多网卡加速器使用,例如来自 Solarflare/Xilinx.

的 OpenOnload

https://sumit-ghosh.com/articles/hijacking-library-functions-code-injection-ld-preload/