스크립트/파일의 끝을 어떻게 결정하는지 궁금합니다. 나는 특히 V6와 같은 이전 Unix 버전에 관심이 있습니다.
쓰여진 마지막 문자 뒤에 "\0"이 있습니까?
답변1
이전 Unix의 사용자 모드 프로그램에서도 파일 끝에 "패드" 바이트가 표시되지 않습니다. MS-DOS 또는 CP/M이 디스크 블록을 Ctrl-Z 문자로 채운다는 것을 알고 있으므로 파일 읽기 알고리즘은 디스크 블록의 끝뿐만 아니라 패딩 바이트도 확인해야 합니다.
유닉스는 이런 일을 한 적이 없습니다. 프로그램은 파일 끝 조건이 발생할 때까지 바이트를 읽습니다. 이는 read(2)
시스템 호출의 경우 0을 반환한다는 의미입니다. 불행히도 장기 실행 시스템 호출이 중단되어 read()
오류 코드(-1)가 반환되고 전역 기호가 errno
EINTR로 평가되므로 전통적으로 Unix에서는 특정 장치를 읽을 때 약간의 어리석음을 도입합니다.
이 모든 것에는 파일 시스템 측면도 있습니다. Unix 파일 시스템은 데이터를 디스크 블록에 저장하고 파일 크기(바이트) 값을 inode에 유지합니다. 일부 다른 운영 체제에서는 파일 크기를 블록 단위로만 저장합니다. 데이터가 블록보다 작은 경우 문제는 사용자 공간으로 스며들어 패딩 바이트 또는 기타 말도 안되는 문제로 발생합니다.
답변2
불필요한. 쉘 인터프리터는 일부( 복잡한) 시스템 호출 래퍼(예:read()
다소fread()