13

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

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 标题是跨平台的(用于 POSIX 机器)。有什么建议么。

4

1 回答 1

18

参考http://www.nexenta.org/os/Porting_Codefixes

solaris 中的 struct dirent 定义不包含该d_type字段。您需要进行如下更改

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

更改为

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)遵循标准。

于 2010-02-04T07:36:51.367 回答