Limit.h에서 PATH_MAX 및 NAME_MAX를 변경하면 어떻게 되나요?

Limit.h에서 PATH_MAX 및 NAME_MAX를 변경하면 어떻게 되나요?

리눅스 커널 PATH_MAXNAME_MAX.limits.conf

이 상수를 늘리고 커널을 다시 컴파일하면 어떻게 됩니까?

/usr/include/linux/limits.h또한 이를 변경 하고 libc(및 헤더가 포함된 모든 프로그램)를 다시 컴파일해야 한다고 생각합니다 .

  1. 더 긴 경로/이름으로 파일을 만들 수 있나요?
  2. 이렇게 긴 파일 이름을 가진 파일 시스템을 다른 시스템에 마운트하면 어떻게 됩니까?

질문 2: 커널이 .보다 큰 경로를 생성하는 것을 방지한다는 것을 알고 있습니다 . 그러나 파일 시스템 자체가 그보다 긴 경로(예: after ) PATH_MAX를 제공하는 경우 이를 어떻게 처리하는지 알고 싶습니다 .ls

답변1

  1. 더 긴 경로를 가진 파일을 만드는 것이 이미 가능합니다. 상대 경로를 사용하고 마운트 지점을 변경하는 등의 방법으로 .보다 긴 절대 경로를 가진 파일을 생성할 수 PATH_MAX있으며 커널은 이를 처리하는 방법을 이미 알고 있습니다. 증가 PATH_MAX하는include/uapi/linux/limits.h, 아니요limits.conf) 한 번에 처리할 수 있는 최대 경로 길이가 늘어납니다. 허드정의되지도 않았어PATH_MAX.

    NAME_MAXLinux에서 사용되는 대부분의 파일 시스템이 제한되기 때문에 늘리는 것이 반드시 큰 도움이 되는 것은 아닙니다.255바이트 구성 요소 이름만 지원합니다..

  2. 위에서 언급했듯이 더 긴 경로는 이미 현실이며 Unix 스타일 시스템은 이를 처리할 수 있습니다(상대 경로, 심볼릭 링크 등을 사용하여). 더 길게이름등이 발생할 수도 있습니다.readdir예상 최대값보다 긴 이름을 반환할 수 있도록 문서화되었습니다.

당신은 또한 볼 수 있습니다Linux는 255바이트보다 긴 파일 이름을 어느 정도까지 지원합니까?

또한 프로그램은 빌드 타임 상수를 사용해서는 안 limits.h됩니다 .pathconf. 불행하게도 항상 그런 것은 아니며 지정된 길이가 없는 사용자 공간 프로그램에서 제공하는 버퍼에 쓸 때 커널이 더 큰 합계를 가정하는 문제에 직면할 가능성이 높습니다 PATH_MAX.NAME_MAX

관련 정보