In my code i am using the variable PATH_MAX for a buffer size. I had a problem when i was including the library who is supposed to define it #include <limits.h>
. When i use this library my IDE doesn't recognize the variable as being define but when I include the library like #include <linux/limits.h>
there is no problem and the variable is define. My question is what is the difference between both of them and will it cause problem when I will cross-compile my project ?
Thank you for all answer!
CodePudding user response:
The limits.h header is a standard header that all implementations are required to supply. This contains numerical limits such as INT_MIN
and INT_MAX
among others. PATH_MAX
is not part of this file.
The linux/limits.h header is specific to Linux. It is here that PATH_MAX
is defined.
CodePudding user response:
linux/limits.h is a very small header file:
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#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
And this file is defining PATH_MAX
in Linux.
limits.h
is a C standard header defining language (not system) related macros.