gpt4 book ai didi

unix - 跨平台测试文件是否是目录的方法

转载 作者:行者123 更新时间:2023-12-02 04:16:14 25 4
gpt4 key购买 nike

目前我有一些代码,例如(压缩并删除了一堆错误检查):

dp = readdir(dir);
if (dp->d_type == DT_DIR) {
}

这在我的 Linux 机器上运行得很好。然而在另一台机器上(看起来像 SunOS、sparc):

SunOS HOST 5.10 Generic_127127-11 sun4u sparc SUNW,Ultra-5_10

我在编译时收到以下错误:

error: structure has no member named `d_type'
error: `DT_DIR' undeclared (first use in this function)

我认为 dirent.h header 是跨平台的(对于 POSIX 机器)。任何建议。

最佳答案

引用号http://www.nexenta.org/os/Porting_Codefixes :

The struct dirent definition in solaris does not contain the d_type field. You would need to make the changes as follows

if (de->d_type == DT_DIR)
{
return 0;
}

changes to

struct stat s; /*include sys/stat.h if necessary */
..
..
stat(de->d_name, &s);
if (s.st_mode & S_IFDIR)
{
return 0;
}

由于 stat 也是 POSIX 标准,因此它应该更具跨平台性。但您可能需要使用 if ((s.st_mode & S_IFMT) == S_IFDIR) 来遵循标准。

关于unix - 跨平台测试文件是否是目录的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2197918/

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