gpt4 book ai didi

c - 如何判断文件是否在FAT系统上(看是否真的可执行)

转载 作者:太空狗 更新时间:2023-10-29 11:05:49 26 4
gpt4 key购买 nike

我在一个独立于操作系统的文件管理器工作,我通常根据扩展名将文件分组。在 Linux 上,我检查文件是否具有可执行权限,如果有,我将其添加到可执行文件组。这对 Windows 或 Linux 非常有效,但如果将它们结合使用,效果就不太好。例如,在 Linux 上使用它并浏览安装在 Windows 上的驱动器时,所有文件似乎都是可执行的。我试图找到一种方法来忽略这些文件而不是将它们添加到可执行文件组中。我的代码(在 Linux 上)使用 stat:

#ifndef WINDOWS
stat(ep->d_name, &buf);
....
if(!files_list[i].is_dir && buf.st_mode & 0111)
files_list[i].is_exe=1;
#endif

最佳答案

答案的第一部分是找出文件挂载在哪个文件系统上。为此,您需要使用文件的 stat 信息的 st_dev 字段找到文件系统。 (您也可以通过检查文件路径来做到这一点,但是您必须检查每个路径元素的符号链接(symbolic link))。

然后您可以使用 getmntent_r() 交叉引用 st_dev 字段和 /proc/mounts 中的挂载表。有 an example of that in a previous answer . mnt_type 字段将为您提供文件系统类型的文本,您需要将该字符串与 Windows 文件系统列表进行比较。

一旦找到文件系统,识别可执行文件的唯一方法就是试探法。正如其他人所建议的那样,您可以查看 Windows 可执行文件的文件扩展名,并查看 Linux 可执行文件的文件的初始字节。不要忘记带有 #! 前缀的可执行脚本,您可能需要读入 Jar 文件以查明它是否包含可执行的静态 main() 方法。

关于c - 如何判断文件是否在FAT系统上(看是否真的可执行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7481322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com