Solaris 10: альтернатива dirfd ()

0

Я работал над RHEL 6.5 и разработал код, который будет использовать функцию dirfd() для readdir_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
                            }
                        }
                  }
    }

Этот фрагмент кода отлично работает в RHEL 6.5 (Linux), но когда я запускаю его в Oracle Solaris 10, он выходит из строя с ошибкой Undefined symbol dirfd.

Я искал это fucntion в /usr/include/dirent.h но его нет. То же самое можно найти в версии Linux версии dirent.h.

Я где-то читал, что dirfd() недоступен в Solaris 9 и 10.

Итак, есть ли эквивалентная обходная функция этой функции в Solaris 10?

Теги:
solaris-10

1 ответ

0
Лучший ответ

Эта поздняя функция BSD была стандартизована в 2008 году, в то время как Solaris 9 была выпущена в 2001 году и Solaris 10 в 2005 году. Это причина, по которой она недоступна в этих версиях.

dirfd доступен с текущей версией Solaris 11.

Для более старых, переопределение dirfd кажется очевидным, учитывая тот факт, что файловый дескриптор уже находится в переданной структуре, здесь dir->d_fd или dir->dd_fd зависимости от того, определен ли __XOPEN_OR_POSIX или нет.

  • 0
    Выполнение очень маленького кода завершается с ошибкой: test.c:13: error: structure has no member named fd . Это единственно возможное решение?
  • 1
    Ответ обновлен.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню