Linux에서 PATH_MAX는 어디에 정의되어 있습니까?
을 ""로 ?#include
PATH_MAX는 int에 있습니다.
선언할 수 있는 것은 다음과 같습니다.
char *current_path[PATH_MAX];
그러나 이 경우 컴파일러(Linux에서는 Clang/LLVM)에서 다음 오류가 발생합니다.
recursive_find6.c:29:20: error: use of undeclared identifier 'PATH_MAX'
char *current_path[PATH_MAX];
^
구글 검색을 해봤는데 아직 안 됐어요.
#include <limits.h>
문제/오류는 해결되지 않는다.
PATH_MAX 값이 int라는 것도 맞습니까?
its 에 있어요.linux/limits.h
.
#define PATH_MAX 4096 /* # chars in a path name including nul */
#include <linux/limits.h>
char current_path[PATH_MAX];
PATH_MAX
이 블로그에 기재되어 있는 몇 가지 결함이 있다(고맙다 paulsm4).
미정, 미정 등은 하다는 점에 유의하시기 .PATH_MAX
후행 눌다른 운영 체제에서는 둘 중 하나일 수 있습니다.수 없거나 인위적인 더 합니다.PATH_MAX - 1
한 것보다는 안전한 게 해PATH_MAX
퍼링하는메메메메메메메바바바수수)
휴대용 방법은 다음과 같습니다.
#define _POSIX_C_SOURCE 1
#include <limits.h>
사양 : https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html
간단한 C 프로그래밍을 할 때도 같은 난관에 봉착했습니다.특정 Linux 시스템에서 /usr/include 디렉토리에는 Linux OS 고유의 헤더 파일이 다수 포함되어 있습니다.
find . -name "*.h" | xargs grep PATH_MAX
PATH_MAX를 정의하는 헤더가 여러 개 표시됩니다.유감스럽게도 이 값은 헤더마다 다르게 정의되어 있습니다.다음은 Ubuntu 목록입니다(또한 GREP 프로그램에서 잘못된 긍정 히트도 수동으로 삭제했습니다).
./x86_64-linux-gnu/bits/posix1_lim.h:#define _POSIX_PATH_MAX 256
./X11/InitialI.h:#ifndef PATH_MAX
./X11/InitialI.h:#define PATH_MAX 512
./X11/InitialI.h:#ifndef PATH_MAX
./X11/InitialI.h:#define PATH_MAX MAXPATHLEN
./X11/InitialI.h:#define PATH_MAX 1024
./X11/Xos.h:# define PATH_MAX 4096
./X11/Xwindows.h:#if defined(WIN32) && (!defined(PATH_MAX) || PATH_MAX < 1024)
./X11/Xwindows.h:# undef PATH_MAX
./X11/Xwindows.h:# define PATH_MAX 1024
./X11/Xosdefs.h:# ifndef PATH_MAX
./X11/Xosdefs.h:# define PATH_MAX 4096
./X11/Xosdefs.h:# ifndef PATH_MAX
./X11/Xosdefs.h:# define PATH_MAX 1024
./X11/extensions/XKBsrv.h:#define PATH_MAX MAXPATHLEN
./X11/extensions/XKBsrv.h:#define PATH_MAX 1024
./python2.7/osdefs.h:#ifndef PATH_MAX
./python2.7/osdefs.h:#define PATH_MAX MAXPATHLEN
./python2.7/osdefs.h:#if defined(PATH_MAX) && PATH_MAX > 1024
./python2.7/osdefs.h:#define MAXPATHLEN PATH_MAX
./linux/limits.h:#define PATH_MAX 4096 /* # chars in a path name including nul */
./linux/btrfs.h:#define BTRFS_INO_LOOKUP_PATH_MAX 4080
./linux/un.h:#define UNIX_PATH_MAX 108
헤더 /linux/limits.h는 가장 많은 수를 가지고 있으며 가장 확실한 헤더여야 합니다.PATHLEN(대부분의 실제 상황에서 4080은 충분히 길다)이라고 하는 다른 이름으로 자신의 이름을 정의하는 것도 하나의 방법입니다.내 요점은 당신의 질문에 대한 답을 찾기 위해 찾기를 배우는 것이다.
PATH_MAX는 시스템 제한입니다.POSIX 환경에 존재하는 시스템 제한에는 3가지 카테고리가 있습니다.이러한 카테고리 중 하나가 Pathname Variable Values입니다.파일 시스템에 따라 달라지는 시스템 제한은 이 범주에 속합니다.PATHMAX는 pathname 변수값이기도 합니다.(이 때문에 이 값은 파일시스템에서 파일시스템으로 변경될 수 있습니다).따라서 PATHNAME 제한은 pathconf()/fpathconf() POSIX 함수로 얻을 수 있습니다.이 방법은 spesific 파일 시스템의 PATHNAME 제한을 가져오는 휴대용 방법입니다.코드 예는 다음과 같습니다.
long
get_pathmax(void)
{
long pathmax = -1;
errno = 0;
pathmax = pathconf("/", _PC_PATH_MAX);
if (-1 == pathmax)
{
if (0 == errno)
{
#define PATHMAX_INFINITE_GUESS 4096
pathmax = PATHMAX_INFINITE_GUESS;
}
else
{
fprintf (stderr, "pathconf() FAILED, %d, %s\n", errno, strerror(errno));
}
}
return pathmax;
}
언급URL : https://stackoverflow.com/questions/9449241/where-is-path-max-defined-in-linux
'IT이야기' 카테고리의 다른 글
Jest에서 VueJ(Nuxt) 스토어를 테스트하는 방법 (0) | 2022.06.04 |
---|---|
Vuex Module Getter에 액세스할 수 없음 - 정의되지 않은 속성 'getters'를 읽을 수 없음" (0) | 2022.06.04 |
Laravel Echo 500 오류(브로드캐스트/인증) (0) | 2022.06.03 |
Mocha 테스트에서 VueX 스토어를 라우터에 Import할 수 없음 (0) | 2022.06.03 |
순수 VUE 구성 요소에 스타일 추가 (0) | 2022.06.03 |