filename too long——探究Linux支持最长文件名255字节还是字符

最近在使用Python 的wget包下载文件时遭遇了OSError: filename too long的异常,经检查下载的文件名确实很长,于是去查询Linux x86_64架构下最长文件名支持是多少。

这篇文章中提到Linux单目录名支持最大255个字符,全路径支持4096,但出问题的文件名称才九十多个字符。于是写了一个Python脚本验证一下:

import os

if __name__ == ‘__main__‘:
    addname = ‘我‘
    basename = ‘‘
    while True:
        basename += addname
        try:
            with open(basename, ‘w‘) as f:
                os.remove(basename)
        except Exception as e:
            print(‘length %d failed‘ % len(basename))
            break

输出为86,并不是256。而考虑到大多数汉字的utf-8编码一般占3字节,显然Linux对目录名长度255的限制是字节数而不是字符数。出问题的文件名因为含有大量中日文,其用bytes(str, encode=‘utf-8‘)转换为字节格式后长度已经超过255,尝试将文件名删减到255字节以下后成功保存。

结论:x86_64 Linux下文件名最长为255个字节,具体是多少个字符要看字符的utf-8编码,一般英文会比较长,中文和特殊符号等等比较短。

原文地址:https://www.cnblogs.com/qjfoidnh/p/12248643.html

时间: 2024-10-09 19:30:37

filename too long——探究Linux支持最长文件名255字节还是字符的相关文章

linux支持的内存根文件系统

linux支持两种内存根文件系统:ramdisk和initramfs. ---------------------------------------------------------------------------------------------------- Document/early-userspace/README 128 The kernel has currently 3 ways to mount the root filesystem:129 130 a) all r

让你的linux支持chm文档的阅读

对于程序员来说经常要查看一些Reference帮助文档,可是面对一些旧文档,以及在没有网络的状况下,如何让你的linux支持chm文档的阅读,那么看下文吧! 方法一: 简单方法,在你的Firefox火狐上安装扩展(Add-on),搜索有一个chmreader,选择安装,重启firefox浏览器即可. 要看*.chm只需在终端执行: firefox *.chm & 优点:安装简单,看纯英文文档毫无压力: 缺点:兼容性较差,部分很多中文不支持,如下图我的c语言函数参考手册.chm只能部分显示中文:

修改linux支持中文显示!

安装中文支持包后 编辑  /etc/sysconfig/i18n 将内容改为LANG="zh_CN.UTF-8"SYSFONT="latarcyrheb-sun16"SUPPORTED="zh_CN.UTF-8:zh_CN:zh" 修改linux支持中文显示!

探究Linux进程及线程堆栈专题<一>

“你定义了那么多全局变量,系统才给你分配了几百KB,这样做是不是太耗内存了?”,一同学问道. 老早就听说嵌入式系统各种资源有限啊,不能分配大空间啊要注意节约资源之类的(...貌似米神4的配置要完爆我的thinkpad了...).那是不是全局变量的使用真的会占用很大系统内存,而系统真的才分配几百KB空间给我呢? 我不信,所以我要尝试一下: 全局变量,肯定是要占用内存的,但无论是不是全局变量,只要是已定义的变量都会占用内存,这个和是否是全局的没啥关系,只是占用的区域不一样而已(详见APUE存储器安排

dumpe2fs Linux支持的文件系统

dumpe2fs  (-bh)装置文件名 选项与参数: -b : 列出保留为坏轨的部分 -h : 仅列出superblock的数据,不会列出其他的区段内容 查看Linux支持的文件系统哪些支持: ls -l /lib/modules/$(uname -r)/kernel/fs 查看目前已加载到内存中的文件系统: cat  /proc/filesystems 原文地址:https://www.cnblogs.com/tenfe/p/10857018.html

LINUX设备驱动程序笔记(三)字符设备驱动程序

      <一>.主设备号和次设备号        对字符设备的访问时通过文件系统内的设备名称进行的.那些设备名称简单称之为文件系统树的节点,它们通常位于/dev目录.字符设备驱动程序的设备文件可通过ls -l命令输出的第一列中的'c'来识别.块设备同样位于/dev下,由字符'b'标识 crw-rw----  1 root root    253,   0 2013-09-11 20:33 usbmon0 crw-rw----  1 root root    253,   1 2013-09

linux源码分析之字节序(5)-- swab.h

在linux源码分析之字节序(3).linux源码分析之字节序(4)中都有看到,源码中包含了 #include <linux/swab.h> 该头函数里面介绍了字节交换的具体方法.我们来看看具体代码: --------------------------------------------------------------------------------------------------------------- #ifndef _LINUX_SWAB_H #define _LINUX

linux源码分析之字节序(2)-- types.h

这一节主要讲linux的数据类型,主要是为了方便理解接下来将大端.小段字节序定义的源码. 首先,来看看 include/linux/types.h 源码: ------------------------------------------------------------------ #ifndef _LINUX_TYPES_H #define _LINUX_TYPES_H #include <asm/types.h> #ifndef __ASSEMBLY__ #include <l

java代码验证用户名,支持中英文(包括全角字符)、数字、下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数

package com.sangedabuliu.www; import java.util.regex.Matcher; import java.util.regex.Pattern; public class UserReg { /** * 验证用户名,支持中英文(包括全角字符).数字.下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数 * @author www.sangedabuliu.com * @param userName * @return */ public