应避免使用 path_max 宏定义固定缓冲区,而需调用 pathconf(".", _pc_path_max) 获取运行时路径长度限制,并为 getcwd() 传入 nullptr 由其自动分配内存。

Linux/macOS 下用 PATH_MAX 宏不保险
很多 C++ 代码直接写 char buf[PATH_MAX],以为这就够了——但 PATH_MAX 是编译时宏,值可能为 0(如某些 glibc 配置)、或远小于实际运行时限制(比如 ext4 实际支持 4096 字节路径,而 PATH_MAX 可能只定义为 4096,但 getcwd() 在超出时仍会失败)。更关键的是,POSIX 允许系统返回 ENAMETOOLONG 即使路径没超 PATH_MAX,因为内核对各组件(目录名、文件名)有独立长度约束。
实操建议:
- 不要依赖
PATH_MAX声明固定大小缓冲区 - 用
pathconf(".", _PC_PATH_MAX)动态查当前挂载点的限制,返回值可能为 -1(表示无硬限制,此时应设合理上限如 4096 或 8192) - 注意:该值是“最长路径字符串长度”,不含末尾
