【发布时间】:2012-10-17 09:49:30
【问题描述】:
对于家庭作业,我必须编写一个 C 程序,它必须做的一件事是检查文件是否存在以及它是否可由所有者执行。
使用(stat(path[j], &sb) >= 0可以查看path[j]指示的文件是否存在。
我已经浏览了手册页、stackoverflow 上的许多问题和答案以及几个网站,但我无法确切了解如何使用 stat 检查文件是否可执行。
我认为它会像((stat(path[j], &sb) >= 0) && (sb.st_mode > 0) && (S_IEXEC) 一样简单,但据我测试它可以看出,它似乎忽略了这些文件不可执行的事实。
我认为也许 stat 不像我认为的那样工作。假设我使用 stat,我该如何解决这个问题?
【问题讨论】:
-
&& (S_IEXEC)根本不依赖于sb,那在你的测试中应该做什么? -
查找按位与运算符。您需要针对 sb.st_mode 使用它和 S_IXUSR
-
有趣的是,如果这是一个 Python 问题,如果您打算稍后依赖该结果,每个人都会立即shout out about how terribly dangerous this is,因为可能存在竞争条件。如果您这样做(并且喜欢保持安全),您可能希望在调用
stat之前获得对文件的锁定。 -
@Mat Ahhhhh 这是我昨晚不太明白的。我最初尝试使用 sb.S_IEXEC,但它给了我一个错误。我没有意识到这是我应该比较的。