【问题标题】:Check if file was created and deleted?检查文件是否被创建和删除?
【发布时间】:2015-09-24 14:15:41
【问题描述】:

我需要测试一个创建临时文件的程序。运行完成后,它会删除文件。如何检查文件是否已创建和删除。

我正在考虑向进程发送一些信号(如 Ctrl-Z)以暂停它并检查,但应该是更简单的方法。

我在 Linux 中使用 bash。

【问题讨论】:

  • 大概,创建文件是为了产生一些您可以检查的其他条件。我会检查(这将确认临时文件已被使用并因此被创建)以及临时文件不再存在(这意味着它被删除或从未创建,但我们排除了“从未创建”的情况在第一次检查中)。
  • 为了测试,您可以通过移动到 /tmp 来更改删除部分,例如如果在执行结束时您在 /tmp 中找到您的文件,这意味着一切都按预期进行。这样您可以根据需要额外检查文件内容。
  • @redobot 如何将删除部分更改为移动 /tmp ?
  • in bash mv filename /tmp .. 如果您使用其他语言,请检查如何操作.. 例如在 C 或 C++ 中,您可以使用 rename (srcpath, destpath)
  • 该文件是程序创建和删除的,无法更改。

标签: linux bash file testing signals


【解决方案1】:

由于您无权访问程序代码,因此您可以使用 strace 工具拦截进程发出的所有系统调用。然后使用简单的 greps,您可以查找文件创建、删除和所有相关操作。可能您必须使用“-f”选项来确保记录所有内容,包括任何进程的子进程执行的操作

【讨论】:

  • 看来这是我需要的。会试试的。谢谢!
  • 完美,它终于对你有用了吗? ..如果是,那么请接受答案,以便更多人在遇到类似问题时可以找到解决方案
【解决方案2】:

如果可以确定文件的创建时间,您可以使用the link command 挂起该文件。例如,在您正在测试的代码中有如下序列:

open some temporary file for writing
# do stuff
write stuff to open file
close file
unlink file

如果在被测程序的open和unlink之间,可以运行

ln the_temp_file my_temp_file

然后,当取消链接发生时,被测试的程序将不知道您有指向该文件的硬链接,因此它不会从文件系统中删除。

这不适用于符号链接ln -s,因此您的链接需要位于同一物理设备上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多