Maximum allowed file path length for C programming on Linux?

When 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?

asked Feb 12, 2015 by Eric Z Ma (44,280 points)

1 Answer

 
Best answer

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.

answered Feb 12, 2015 by Eric Z Ma (44,280 points)
edited Feb 15, 2015 by Eric Z Ma

Please log in or register to answer this question.

Copyright © SysTutorials. User contributions licensed under cc-wiki with attribution required.
Hosted on Dreamhost

...