首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

代码在上面,函数功能是为路径名动态分配内存,请高手帮忙解释一上

2013-01-28 
代码在下面,函数功能是为路径名动态分配内存,请高手帮忙解释一下代码在下面,函数功能是为路径名动态分配内

代码在下面,函数功能是为路径名动态分配内存,请高手帮忙解释一下
代码在下面,函数功能是为路径名动态分配内存,请高手帮忙解释一下
 #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: 



_PC_LINK_MAX 
returns the maximum number of links to the file. If filedes or path refer to a directory, then the value applies to the whole directory. The corresponding macro is _POSIX_LINK_MAX. 
_PC_MAX_CANON 
returns the maximum length of a formatted input line, where filedes or path must refer to a terminal. The corresponding macro is _POSIX_MAX_CANON. 
_PC_MAX_INPUT 
returns the maximum length of an input line, where filedes or path must refer to a terminal. The corresponding macro is _POSIX_MAX_INPUT. 
_PC_NAME_MAX 
returns the maximum length of a filename in the directory path or filedes. the process is allowed to create. The corresponding macro is _POSIX_NAME_MAX. 
_PC_PATH_MAX 
returns the maximum length of a relative pathname when path or filedes is the current working directory. The corresponding macro is _POSIX_PATH_MAX. 
_PC_PIPE_BUF 
returns the size of the pipe buffer, where filedes must refer to a pipe or FIFO and path must refer to a FIFO. The corresponding macro is _POSIX_PIPE_BUF. 
_PC_CHOWN_RESTRICTED 
returns nonzero if the chown(2) call may not be used on this file. If filedes or path refer to a directory, then this applies to all files in that directory. The corresponding macro is _POSIX_CHOWN_RESTRICTED. 
_PC_NO_TRUNC 
returns nonzero if accessing filenames longer than _POSIX_NAME_MAX generates an error. The corresponding macro is _POSIX_NO_TRUNC. 
_PC_VDISABLE 
returns nonzero if special character processing can be disabled, where filedes or path must refer to a terminal. 
  
RETURN VALUE
The limit is returned, if one exists. If the system does not have a limit for the requested resource, -1 is returned, and errno is unchanged. If there is an error, -1 is returned, and errno is set to reflect the nature of the error.   
CONFORMING TO
POSIX.1   
NOTES
Files with name lengths longer than the value returned for name equal to _PC_NAME_MAX may exist in the given directory. 
Some returned values may be huge; they are not suitable for allocating memory.   

SEE ALSO
getconf(1), open(2), statfs(2), sysconf(3) 

热点排行