首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定文件是否打开?

问如何确定文件是否打开?
EN

Unix & Linux用户
提问于 2021-05-08 17:59:08
回答 1查看 2.6K关注 0票数 1

我的代码需要遍历目录中的文件,只选择那些当前由系统上任何其他进程打开(编写)的文件。

理想的解决方案将适用于所有的Unixes,但我会满足于只使用Linux。

这个程序是用Python编写的,但是我可以添加一个定制的C-函数,如果有必要的话--我只需要知道,有什么API可以用于这个.

我发现的一个建议是查看Linux /proc下的所有文件描述符,解析它们的链接,看看它们是否指向感兴趣的文件。但这似乎相当沉重..。

例如,我知道打开一个文件会增加它的引用计数--即使文件被删除,文件系统也不会释放打开文件的块--直到它被关闭--这是tmpfile(3)所依赖的特性。

也许,用户进程可以访问内核中的这些记录?

EN

回答 1

Unix & Linux用户

发布于 2021-05-08 19:50:36

fnctl是你要找的东西。它的man页面非常详细。它告诉您是否打开的文件是只读或写入以及返回-1关闭的文件。它功能强大,可以给出更多细节,比如(有缺陷的)锁机制。

代码语言:javascript
复制
#include <fcntl.h>

int
fcntl(int fd, int cmd, ...);

为了达到您的目的,请使用F_GETFL标志,如

代码语言:javascript
复制
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描述打开的文件。

票数 -3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/648819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档