Maximum allowed file path length for C programming on Linux?
Posted on In QAWhen programming in C on Linux, it is common to allocate a buffer for storing the full path of a file.
How to get a safe maximum size for allocating buffers for file paths?
The header <linux/limits.h>
includes macros for the path and file name length limits.
On my system (Fedora 21), it is located in
/usr/include/linux/limits.h
For your reference, the content is:
#ifndef _LINUX_LIMITS_H
#define _LINUX_LIMITS_H
#define NR_OPEN 1024
#define NGROUPS_MAX 65536 /* supplemental group IDs are available */
#define ARG_MAX 131072 /* # bytes of args + environ for exec() */
#define LINK_MAX 127 /* # links a file may have */
#define MAX_CANON 255 /* size of the canonical input queue */
#define MAX_INPUT 255 /* size of the type-ahead buffer */
#define NAME_MAX 255 /* # chars in a file name */
#define PATH_MAX 4096 /* # chars in a path name including nul */
#define PIPE_BUF 4096 /* # bytes in atomic write to a pipe */
#define XATTR_NAME_MAX 255 /* # chars in an extended attribute name */
#define XATTR_SIZE_MAX 65536 /* size of an extended attribute value (64k) */
#define XATTR_LIST_MAX 65536 /* size of extended attribute namelist (64k) */
#define RTSIG_MAX 32
#endif
These 2 macros specify the maximum file name and path name lengths:
#define NAME_MAX 255 /* # chars in a file name */
#define PATH_MAX 4096 /* # chars in a path name including nul */
As it is Linux specific, your code using this header will not be portable to Unix or Windows OSes.