我的代码需要遍历目录中的文件,只选择那些当前由系统上任何其他进程打开(编写)的文件。
理想的解决方案将适用于所有的Unixes,但我会满足于只使用Linux。
这个程序是用Python编写的,但是我可以添加一个定制的C-函数,如果有必要的话--我只需要知道,有什么API可以用于这个.
我发现的一个建议是查看Linux /proc下的所有文件描述符,解析它们的链接,看看它们是否指向感兴趣的文件。但这似乎相当沉重..。
例如,我知道打开一个文件会增加它的引用计数--即使文件被删除,文件系统也不会释放打开文件的块--直到它被关闭--这是tmpfile(3)所依赖的特性。
也许,用户进程可以访问内核中的这些记录?
发布于 2021-05-08 19:50:36
fnctl是你要找的东西。它的man页面非常详细。它告诉您是否打开的文件是只读或写入以及返回-1关闭的文件。它功能强大,可以给出更多细节,比如(有缺陷的)锁机制。
#include <fcntl.h>
int
fcntl(int fd, int cmd, ...);为了达到您的目的,请使用F_GETFL标志,如
int r, fd;
r = fcntl ( fd, F_GETFL );
if (r==-1)
printf("File %d is closed.\n", fd);
if (r>0)
printf("File %d is open.\n", fd);如果返回值为-1,则文件未打开(或fd不是有效的文件描述符)。如果返回值为正,则fd描述打开的文件。
https://unix.stackexchange.com/questions/648819
复制相似问题