说明:版权所有归作者,只供学习交流,若有其它用途请联系作者,转载请遵守IT人职业规范,请注明转载地址
使用pathconf函数可以动态获得当前系统的目录的最大长度。具体定义形式如表所示:
pathconf函数
头文件 |
<unistd.h> |
|
函数形式 |
long pathconf(char *path, int name); | |||
返回值 |
成功 |
失败 |
是否设置errno | |
返回目录长度的极限值 |
-1 |
是 |
说明:
pathconf()用于获得给定目录或文件的极限(path可以是包含文件名称的具体文件位置)。极限的名称由name参数给定,name可以取下面的值:
(1):_PC_LINK_MAX:如果path是文件的具体路径,返回文件最大的链接数;如果path是指目录,则极限反映这个目录的连接数。
(2):_PC_MAX_CANON:如果path指向的是终端,返回格式化输出的最大长度。
(3):_PC_MAX_INPUT:如果path指向的是终端,返回格式化输入的最大长度。
(4):_PC_NAME_MAX:返回创建进程时充许的最大文件名长度
(5):_PC_PATH_MAX:返回当前工作目录最大的目录长度。
(6):_PC_CHOWN_RESTRICTED:chown函数调用不能应用于该文件,返回非零值。如果path指向的是目录,则目录下的所有文件都应用该规则。
(7):_PC_NO_TRUNC:如果文件名超过_POSIX_NAME_MAX,返回非零值。
(8):_PC_VDISABLE:当path指向的是终端,如果禁止了特殊字符的处理,返回非零值。
错误信息:
(1): EINVAL: name参数无效。
(2): ELOOP:解析path时存在循环。
实例:
#include <unistd.h>
#include <iostream>
int main(void)
{
long cur_path_len = 0;
char *cur_work_dir = '\0';
//获得目录的长度
if ((cur_path_len=pathconf(".", _PC_PATH_MAX))==-1)
{
perror("Couldn't get current working path length");
return (1);
}
std:: cout << "Current Path Length is " <<
cur_path_len << std:: endl;
//根据获得的目录最大长度,分配内存
if ((cur_work_dir=(char *)malloc(cur_path_len))==NULL)
{
perror("Couldn't allocate memory for the pathname");
return (1);
}
//得到当前工作目录
if (getcwd(cur_work_dir, cur_path_len)==NULL)
{
perror("Couldn't get current working directory");
return (1);
}
std:: cout << "Current Working Directory Is " <<cur_work_dir << std::endl;
free(cur_work_dir);
cur_work_dir = NULL;
return (0);
}
运行的结果:
Current Path Length is 4096
Current Working Directory Is /c/test