Linux路径名和文件名最大长度限制

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;
}
时间: 2024-08-08 09:38:50

Linux路径名和文件名最大长度限制的相关文章

Android Java 与 C++ 调用过程中的常量,路径名、文件名、后缀名最大长度

/**************************************************************************** **************************************************************************** *** ***   This header was automatically generated from a Linux kernel header ***   of the same

linux shell 字符串操作(长度,查找,替换,匹配)详解

linux shell 字符串操作(长度,查找,替换,匹配)详解 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间,因此速度会非常的快. 一.判断读取字符串值 表达式 含义 ${var} 变量var的值, 与$var相同     ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${va

Linux里的文件名通配-* ? [] [^] {}

写这篇文章的目的是为了说明Linux系统里文件名匹配时要用的特殊字符 特别注意:要与正则表达式区分开来. 正则表达式见我另外一篇文章: http://afterdawn.blog.51cto.com/7503144/1855128 匹配模式:元字符 *:匹配任意长度的任意字符 pa*, *pa*, *pa, *p*a* pa, paa, passwd ?:匹配任意单个字符 pa?, ??pa, p?a, p?a? pa, paa, passwd []:匹配指定范围内的任意单个字符 有几种特殊格式

常见设备与其在linux当中的文件名

在linux系统中,每个设备都被当成一个文件来对待.下面我就列出几个常见的设备与其在linux当中的文件名: ide硬盘         /dev/hd[a-d] scsi/sata/usb硬盘         /dev/sd[a-p] u盘         /dev/sd[a-p](与sata相同) 软驱         /dev/fd[0-1] 打印机         25针:/dev/lp[0-2]     usb:/dev/usb/lp[0-15] 鼠标         usb:/dev

硬件设备在Linux中的文件名

“一切皆文件”是Unix/Linux系统中一个非常重要的思想. 在Linux系统中,具体到硬件来说就是每个设备都被当成一个文件来对待.下面列出几个常见的设备在Linux系统中的文件名. 设备 文件名 IDE硬盘 /dev/hd[a-d] SCSI/SATA/USB 硬盘 /dev/sd[a-p] U盘 /dev/sd[a-p](与SATA相同) 鼠标 USB:/dev/usb/mouse[0-15] PS2:/dev/psaux 当前鼠标 /dev/mouse 当前 CD ROM/DVD ROM

linux下中文文件名乱码解决

在windows上使用ftp上传文件到Linux上,中文名称在Linux系统中显示为乱码.虽然将Linux的env设置了LANG=en_US.UTF-8,并且本地的Shell客户端编码也设置成UTF-8,但在Shell中(或通过http访问),仍是乱码…… 原因在于,Windows 的文件名中文编码默认为GBK,压缩或者上传后,文件名还会是GBK编码,而Linux中默认文件名编码为UTF8,由于编码不一致所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码. yum install co

linux shell 字符串操作(长度,查找,替换)详解

原文地址:http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间,因此速度会非常的快. 一.判断读取字符串值 表达式 含义 ${var} 变量var的值, 与$var相同     ${var-DEFAULT}

linux和windows文件名称长度限制

Linux文件名称的长度限制是255个字符 windows下全然限定文件名称必须少于260个字符,文件夹名必须小于248个字符. linux下文件数.文件夹数.文件名称长度的各种限制 下面測试都是在没有优化或改动内核的前提下測试的结果 1. 測试目的:ext3文件系统下filename最大字符长度  測试平台:RHEL5U3_x64  測试过程:LENTH=`for i in {1..255};do for x in a;do echo -n $x;done;done`touch $LENTH当

(正则表达式)linux shell 字符串操作(长度,查找,替换,匹配)详解

在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间,因此速度会非常的快. 一.判断读取字符串值 表达式 含义 ${var} 变量var的值, 与$var相同     ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:-DEFAULT} 如果var没有被声明, 或者其值为空, 那