关于path_alloc函数(APUE)
今天看书时,看到了path_alloc这个函数,但是不知道在哪定义的,也不知道啥功能,在LINUX C函数库里也没有找到,于是就百度了一下,发现了一篇不错的解释,以下是转载自风玲海淼的百度空间的一篇帖子,链接为http://hi.baidu.com/c_program/blog/item/604cb4ad1845cf0a4a36d603.html
在APUE的某些版本中,在例子4-7和4-9中用到的函数path_alloc()函数,许多人直接把例题输入后发现并不能编译,这是由于path_alloc()函数的原因,因此,我们需要将这个函数补齐。
我从网上查了一下,其中有好多的答案是从apue的老版本中的解决方法,如下: Figure 2.15. Dynamically allocate space for a pathname #include "apue.h" #include <errno.h> #include <limits.h> #ifdef PATH_MAX static int pathmax = PATH_MAX; #else static int pathmax = 0; #endif #define SUSV3 200112L static long posix_version = 0; /* If PATH_MAX is indeterminate, no guarantee this is adequate */ #define PATH_MAX_GUESS 1024 char * path_alloc(int *sizep) /* also return allocated size, if nonnull */ { char *ptr; int size; if (posix_version == 0) posix_version = sysconf(_SC_VERSION); if (pathmax == 0) { /* first time through */ errno = 0; if ((pathmax = pathconf("/", _PC_PATH_MAX)) < 0) { if (errno == 0) pathmax = PATH_MAX_GUESS; /* it's indeterminate */ else err_sys("pathconf error for _PC_PATH_MAX"); } else { pathmax++; /* add one since it's relative to root */ } } 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); } 另外,还发现一个简单的解决方法,当然,这个解决方法只是简单的定义path_alloc()这个函数,但是,可以使我们的程序正常的运行... char*path_alloc(int* size) { char *p = NULL; if(!size) return NULL; p = malloc(256); if(p) *size = 256; else *size = 0; return p; } |