如何通过程序执行打开和关闭文件列表
How to get a list of files opened and closed by a program execution?
我有一个程序的源代码。源代码非常庞大,是用C/c++编写的。我有资格修改源代码,编译并执行它。
我想知道这个程序在执行时打开和关闭的所有文件的文件名。如果这个列表按照文件操作发生的顺序排序,那将是一个加分项。
我怎样才能得到这个信息?是否有一些监控工具,我需要使用或我可以注入一个库调用到c++代码来实现这一点?代码太大太复杂,无法查找每个文件的open/close调用并在那里添加printf。或者在文件打开API调用中添加伪宏也可能很困难。
请注意,这与查看进程当前打开的文件不同。我知道StackOverflow上的许多问题已经解决了这个问题(使用lsof或/proc等)。
您可以使用以下strace
$ strace -e trace=open,close -o /tmp/trace.log <your_program> <program_options>
在文件/tmp/trace.log
中,您将获得所有由程序完成的打开,关闭操作。
除了strace,您还可以使用interposition来拦截打开/关闭系统调用。如果你搜索"interposition shared library linux",你也会得到很多其他的参考。
我理解您希望静态地确定给定的源代码可以打开哪些文件(对于其编译程序的多次运行)。
如果你只想在给定的运行中动态地知道它,使用Rohan回答的strace(1)和/或Kec回答的interposition library。请注意,ltrace(1)也可能很有用,而且可能更相关(因为您将跟踪stdio
或c++库调用)。
首先,程序可以(很多程序都是这样做的)打开一个文件名为某个输入(或某个程序参数)的文件。那么您就不能将任意文件名添加到列表中。
您可以#define fopen
和#define open
打印消息。你可以使用LD_PRELOAD
的技巧来覆盖open
, fopen
如果在c++中,程序可以使用std::ifstream等打开文件…
您可以考虑使用MELT自定义GCC编译器来帮助您…
- 如何从远程 SFTP 服务器获取 HH-MM-SS 时间戳格式的文件列表
- 使用通配符的跨平台文件列表
- 如何显示目录中的文件列表
- C 需要帮助的作业程序,该程序在文件列表中读取并在每个双重的双重列表中添加一个字符串
- 如何将用户下载的标头文件添加到系统中默认情况下的标题文件列表
- 如何使用 Win API 获取文件夹中的文件列表(带过滤器)
- 如何从"开始组..结束组"链接器选项构建文件列表
- C MakeFile项目如何使用相同的Basename加上后缀和相同扩展名创建文件列表
- 通过编程C MFC查找目录中的文件列表
- 读取文件夹中的文件列表时获取分段折叠
- std::可执行文件列表
- 在客户端和远程服务器中比较文件列表的有效方法是什么?
- 文件列表和Qt的空结果
- 将子目录中的文件列表导入数组
- 如何将默认目录中的文件列表从服务器发送到客户端
- 如何获取给定文件夹中具有特定扩展名的文件列表
- 在C++中修改 Google 云端硬盘文件列表请求参数
- QFileSystemWatcher::files() 不返回文件列表
- 如何在Windows平台中获取远程Windows服务器的共享文件夹的文件列表
- C/ c++和c#语法检查器,可以在文件列表上运行