关于path_alloc函数(APUE)


转于: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;

}


你可能感兴趣的:(null,Path)