Home > Software design >  Difference between #include <limits.h> and #inlcude <linux/limits.h>
Difference between #include <limits.h> and #inlcude <linux/limits.h>

Time:07-30

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.

  • Related