UNIX標准對路徑名和文件名最大長度限制做出了說明,但其上限值在實際應用長過小,Linux在具體實現時提升了該上限,該限制在Linux的 /usr/include/linux/limits.h 中做出了說明,具體如下:
1 #ifndef _LINUX_LIMITS_H 2 #define _LINUX_LIMITS_H 3 4 #define NR_OPEN 1024 5 6 #define NGROUPS_MAX 65536 /* supplemental group IDs are available */ 7 #define ARG_MAX 131072 /* # bytes of args + environ for exec() */ 8 #define LINK_MAX 127 /* # links a file may have */ 9 #define MAX_CANON 255 /* size of the canonical input queue */ 10 #define MAX_INPUT 255 /* size of the type-ahead buffer */ 11 #define NAME_MAX 255 /* # 文件名最大字符數 */ 12 #define PATH_MAX 4096 /* # 相對路徑名最大字符數 */ 13 #define PIPE_BUF 4096 /* # bytes in atomic write to a pipe */ 14 #define XATTR_NAME_MAX 255 /* # chars in an extended attribute name */ 15 #define XATTR_SIZE_MAX 65536 /* size of an extended attribute value (64k) */ 16 #define XATTR_LIST_MAX 65536 /* size of extended attribute namelist (64k) */ 17 18 #define RTSIG_MAX 32 19 20 #endif
上述文件內容的第11行和第12行分別說明了文件名和相對路徑名的最大長度。需要說明的是,字符指的是ASCII字符,如果是漢字或者其他語言,則需要視編碼而定。
上述頭文件可以被包含到程序中,然后直接加以引用,這些值也可以使用pathconf( )函數來查詢,pathconf( )函數的參數可以參閱該文章中的表格:UNIX環境高級編程 第2章 UNIX標准及實現
一個簡單示例demonstration如下:
#include <iostream> #include <unistd.h> using namespace std; int main() { cout << pathconf("/",_PC_NAME_MAX) << endl;return 0; }