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

Я работал над 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,

Я искал эту функцию в /usr/include/dirent.h но это не там. То же самое доступно в dirent.h версия Linux.

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

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

0

Решение

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

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

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

0

Другие решения


По вопросам рекламы [email protected]