首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solaris 10: dirfd()的替代方案

Solaris 10: dirfd()的替代方案
EN

Stack Overflow用户
提问于 2015-01-19 10:29:17
回答 1查看 451关注 0票数 1

我曾在RHEL6.5上工作过,并开发了一些使用dirfd()函数用于readdir_r()的代码,如下所示:

代码语言:javascript
复制
    #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
                            }
                        }
                  }
    }

这段代码在RHEL6.5 (Linux)中工作得很好,但是当我在Oracle Solaris 10中运行它时,它会出现一个错误Undefined symbol dirfd失败。

我在/usr/include/dirent.h中搜索了这个函数,但它不在那里。这在Linux的dirent.h版本中也是可用的。

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

那么,在Solaris 10中是否存在此函数的等效解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-19 13:14:05

这一后期的BSD功能是在2008年标准化的,Solaris 9在2001年发布,Solaris 10在2005年发布。这就是为什么这些版本无法使用它的原因。

dirfd可与当前版本Solaris 11一起使用。

对于旧版本,重新实现dirfd似乎是显而易见的,因为文件描述符已经在传递的结构中,这里是dir->d_fd还是dir->dd_fd,这取决于是否定义了__XOPEN_OR_POSIX

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28022507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档