關於path_alloc()函式

2puT發表於2016-07-08

在《UNIX環境高階程式設計》學習中,在第四章的程式清單4-7中,發現了一個“錯誤”。發現即使apue.h中宣告瞭path_alloc()這個函式,但是在編譯程式清單時還是會提示path_alloc()未定義。這其實並不是錯誤,因為我本來就沒有這個函式的實現。

如果我在第二章看得仔細的話,就能發現原來path_alloc()的實現在程式清單2-3中。

現在自己把函式實現貼出來,以示警告:

#include    "apue.h"
#include    
#include    


#ifdef PATH_MAX
static int pathmax = PATH_MAX;
#else
static int pathmax = 0;
#endif


#define SUSV3 200112L


static long posix_version = 0;
#define PATH_MAX_GUESS1024


char    *path_alloc(int *sizep)
{
char    *ptr;
int size;


if(posix_version == 0)
posix_version = sysconf(_SC_VERSION);


if(pathmax == 0){
errno = 0;
if((pathmax = pathconf("/", _PC_PATH_MAX)) < 0){
if(errno == 0)
pathmax = PATH_MAX_GUESS;
else err_sys("pathconf error for _PC_PATH_MAX");
} else {
pathmax++;
}
}
if(posix_version < SUSV3)
size = pathmax + 1;
else size = pathmax;
if((ptr = malloc(size)) == NULL)
err_sys("malloc error for pathname");
if(sizep != NULL)
*sizep = size;
return(ptr);
}

相關文章