저는 C 프로그래밍 언어(2판)을 읽고 있습니다. 157페이지와 158페이지에서 저자는 fopen
Unix 시스템의 코드 조각을 제공합니다. 저자는 조각 끝에 다음과 같이 덧붙였습니다.
특히
fopen
바이너리 액세스의 경우 "b"를 인식할 수 없습니다.무의미한UNIX 시스템에서는 "+"를 읽고 쓸 수 없습니다.
저자는 왜 그것이 무의미하다고 말합니까? (여기서 언급된 "b"와 "+"는 파일 액세스 모드입니다)
답변1
일부 비 Unix 시스템에서는 바이너리 파일과 텍스트 파일을 다르게 처리합니다. 예를 들어, DOS, Windows 및 OS/2(설계상 관련은 없지만 fopen
예제로 유용함)에서 텍스트 모드로 파일을 열고 여기에 쓰면 "C" 규칙 줄 끝( \n
)이 플랫폼에 관계없이 변환됩니다. 필요합니다. 다른 시스템에서는 바이너리 모드로 파일을 열면 로깅에서 처리됩니다. 이것이 fopen
"b" 플래그가 제어하는 것입니다. 이 플래그 없이 열린 파일은 텍스트 모드에서 열리고, 이 플래그로 열린 파일은 바이너리 모드에서 열립니다. Unix 스타일 시스템은 이러한 구별을 하지 않으므로 "b"는 무시됩니다(오류가 발생하지 않습니다).
fopen
내 책에는 "+"가 언급되어 있지 않지만 당시에는 지원되지 않았던 것 같습니다 (지금은 실제로 그렇습니다).
답변2
~에 따르면POSIX 사양fopen()
(그 책이 쓰여졌을 당시에는 존재하지 않았습니다):
이 문자는
b
아무런 영향을 미치지 않지만 ISO C 표준을 준수하는 것이 허용됩니다.
이 b
모드는 허용되어야 하지만 POSIX 시스템에는 영향을 미치지 않습니다.
또한 이 +
모델은 다음과 같습니다.
+
업데이트 모드(mode 인수의 두 번째 또는 세 번째 문자)를 사용하여 파일을 열면 관련 스트림에서 입력 및 출력이 수행될 수 있습니다.
따라서 이는 POSIX 시스템에도 확실히 영향을 미칠 것입니다.
K&R 책이 집필된 이후 C 프로그래밍 언어가 몇 번 변경되었다는 점에 유의하세요.