C++ Solaris 10:dirfd()的替代方案

C++ Solaris 10:dirfd()的替代方案,c++,c,linux,solaris-10,C++,C,Linux,Solaris 10,我曾在RHEL 6.5上工作过,并开发了一些代码,这些代码将使用函数dirfd()作为readdir\u r(),如下所示: #include <dirent.h> #include <sys/types.h> void some_function(){ DIR *dir = NULL; struct dirent *pentry = NULL, *next_file = NULL;

我曾在RHEL 6.5上工作过,并开发了一些代码,这些代码将使用函数
dirfd()
作为
readdir\u r()
,如下所示:

    #include <dirent.h>
    #include <sys/types.h>

    void some_function(){
            DIR *dir = NULL;
            struct dirent *pentry = NULL, *next_file = NULL;
                if ((dir = opendir("/ZB_RQ/")) != NULL) {
                        len_pentry = offsetof(struct dirent, d_name) + fpathconf(dirfd(dir), _PC_NAME_MAX) + 1;
                        pentry = malloc(len_pentry);
                        if(!pentry){
                            exit(0);
                        }

                        for(;;){
                            readdir_r(dir, pentry, &next_file);
                            if(!next_file){
                                //No file to iterate.
                                break;
                            }
                            else{
                                // do something
                            }
                        }
                  }
    }
#包括
#包括
使某些函数无效(){
DIR*DIR=NULL;
struct dirent*pentry=NULL,*next_file=NULL;
if((dir=opendir(“/ZB_RQ/”)!=NULL){
len_pentry=偏移量(结构方向,数据名称)+fpathconf(方向,数据名称)+1;
pentry=malloc(len_pentry);
如果(!pentry){
出口(0);
}
对于(;;){
readdir_r(dir、pentry和next_文件);
如果(!下一个文件){
//没有要迭代的文件。
打破
}
否则{
//做点什么
}
}
}
}
这段代码在RHEL 6.5(Linux)中运行得很好,但是当我在Oracle Solaris 10中运行它时,它失败了,出现了一个错误
未定义的符号dirfd

我在
/usr/include/dirent.h
中搜索了这个函数,但它不在那里。Linux的
dirent.h
版本中也提供了相同的功能

我在某个地方读到,
dirfd()
在Solaris 9和10中不可用


那么,Solaris 10中是否有与此功能等效的解决方法?

此后期BSD功能在2008年标准化,而Solaris 9在2001年发布,Solaris 10在2005年发布。这就是为什么在这些版本中它不可用的原因

dirfd
与当前版本Solaris 11一起提供


对于旧版本,鉴于文件描述符已经在传递的结构中,重新实现
dirfd
似乎是显而易见的,这里的
dir->d\u fd
dir->dd\u fd
取决于是否定义了
\uuuuuxopen\u或\uposix

运行非常小的代码失败,出现错误:
测试。c:13:错误:结构没有名为fd的成员。这是唯一可能的解决方案吗?谢谢@jiliagre<代码>目录->dd_fd
在Solaris 10中编译时没有任何错误: