• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
飞翔de自我
学习——workstation
博客园    首页    新随笔    联系   管理    订阅  订阅

关于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;
}
posted @ 2009-03-08 21:05  小丽yu  阅读(4908)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3