LINE_MAX
을 실행하여 의 값을 얻을 수 있습니다 getconf LINE_MAX
. FreeBSD 12와 Ubuntu 18.04(그리고 다른 많은 버전도 있을 것으로 의심됩니다)에서 이 값은 2048바이트입니다.
POSIX 세계에는 텍스트 파일 작업을 위해 특별히 설계된 쉘 유틸리티가 많이 있습니다. 길이가 바이트(개행 포함)를 초과하는 한 줄이 있는 파일은 LINE_MAX
텍스트 파일이 아닙니다(어차피 POSIX에서 정의한 대로). 이러한 종류의 파일을 적절하게 처리하기 위해 텍스트 파일을 입력으로 사용하도록 설계된 쉘 유틸리티는 필요하지 않습니다.
실제로는 정말 긴 줄이 포함된 텍스트 파일을 처리할 수 없는 유틸리티를 찾을 수 없는 것 같습니다. GNU 유틸리티에는 텍스트 파일의 한 줄 길이에 대한 실제 제한이 없다는 것이 제가 이해한 바입니다(FreeBSD에 대해서는 잘 모르겠습니다).
길이가 바이트를 초과하는 행에서 질식하는 현대 또는 준현대 운영 체제의 쉘 유틸리티를 아는 사람이 있습니까 LINE_MAX
? 여담이지만, Perl이나 Python 같은 프로그래밍 언어도 의 값에 영향을 받나요 LINE_MAX
?
답변1
LINE_MAX
이 사이트에는 적어도 어떤 상황에서는 고수하는 쉘 유틸리티의 예가 하나 이상 있습니다 .오픈BSDcut
; 그렇지 않다초크그보다 긴 줄에서는 일부 기능이 LINE_MAX
줄의 첫 번째 문자로 제한됩니다.
더 긴 줄 작업을 완전히 거부하는 유틸리티 외에도 잠재적으로 원하지 않는 동작을 일으키는 공통 패턴이 있습니다. 입력은 종종 다음을 사용하여 처리됩니다.
fgets(line, sizeof line, fp);
크기가 지정된 문자 배열은 어디에 line
있습니까 LINE_MAX
(예를 들어 참조)pam_localuser
). 가 non- 을 반환할 line
때마다 처리되는 경우 입력이 너무 길면 줄이 분할되어 처리됩니다. 따라서 에서는 보다 긴 줄이 두 줄로 처리됩니다.fgets
NULL
LINE_MAX
pam_localuser
/etc/passwd
LINE_MAX
LINE_MAX
내가 살펴본 프로그래밍 언어와 파서 생성기에는 해당 언어로 작성된 프로그램에 값을 사용할 수 있도록 하는 통과 참조 이외의 참조가 없습니다 . 여기에는 GCC, Perl, Python 및 Lua가 포함됩니다.