代码在上面,函数功能是为路径名动态分配内存,请高手帮忙解释一上
代码在下面,函数功能是为路径名动态分配内存,请高手帮忙解释一下
代码在下面,函数功能是为路径名动态分配内存,请高手帮忙解释一下
#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;
#define PATH_MAX_GUESS 1024
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){//这里要pathconf函数返回值小于0,才执行下面的语句啊,如果小于0,表示出错返回,那么errno的值一定改变了,就不能设置下面的pathmax了,怎么回事????????????????????
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 pathname");
if(sizep!=NULL)
*sizep=size;
return ptr;
}
------解决方案--------------------
FPATHCONF
Section: Linux Programmer's Manual (3 )
Updated: 1993-04-04
--------------------------------------------
NAME
fpathconf, pathconf - get configuration values for files
SYNOPSIS
#include <unistd.h>
long fpathconf(int filedes, int name);
long pathconf(char *path, int name);
DESCRIPTION
fpathconf() gets a value for the configuration option name for the open file descriptor filedes.
pathconf() gets a value for configuration option name for the file name path.
The corresponding macros defined in <unistd.h> are minimum values; if an application wants to take advantage of values which may change, a call to fpathconf() or pathconf() can be made, which may yield more liberal results.
Setting name equal to one of the following constants returns the following configuration options:
代码在下面,函数功能是为路径名动态分配内存,请高手帮忙解释一下
#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;
#define PATH_MAX_GUESS 1024
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){//这里要pathconf函数返回值小于0,才执行下面的语句啊,如果小于0,表示出错返回,那么errno的值一定改变了,就不能设置下面的pathmax了,怎么回事????????????????????
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 pathname");
if(sizep!=NULL)
*sizep=size;
return ptr;
}
------解决方案--------------------
FPATHCONF
Section: Linux Programmer's Manual (3 )
Updated: 1993-04-04
--------------------------------------------
NAME
fpathconf, pathconf - get configuration values for files
SYNOPSIS
#include <unistd.h>
long fpathconf(int filedes, int name);
long pathconf(char *path, int name);
DESCRIPTION
fpathconf() gets a value for the configuration option name for the open file descriptor filedes.
pathconf() gets a value for configuration option name for the file name path.
The corresponding macros defined in <unistd.h> are minimum values; if an application wants to take advantage of values which may change, a call to fpathconf() or pathconf() can be made, which may yield more liberal results.
Setting name equal to one of the following constants returns the following configuration options: