읽기/쓰기를 위한 "+"와 마찬가지로 Unix에서 바이너리 액세스를 위해 파일을 여는 것이 "무의미"한 이유는 무엇입니까?

읽기/쓰기를 위한 "+"와 마찬가지로 Unix에서 바이너리 액세스를 위해 파일을 여는 것이 "무의미"한 이유는 무엇입니까?

저는 C 프로그래밍 언어(2판)을 읽고 있습니다. 157페이지와 158페이지에서 저자는 fopenUnix 시스템의 코드 조각을 제공합니다. 저자는 조각 끝에 다음과 같이 덧붙였습니다.

특히 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 프로그래밍 언어가 몇 번 변경되었다는 점에 유의하세요.

관련 정보