fopen에서 r과 rb의 차이점은 무엇입니까
C에서 fopen을 사용해 보았습니다. 두 번째 매개 변수는 개방 모드입니다. "r"과 "rb"의 두 가지 모드는 저를 많이 혼동하는 경향이 있습니다. 똑같은 것 같습니다. 그러나 때때로 "rb"를 사용하는 것이 더 좋습니다. 그렇다면 왜 "r"이 존재합니까? 자세히 또는 예를 들어 설명해주세요. 감사합니다.
"r"
텍스트 파일을 열 때 사용해야 합니다. 운영 체제마다 텍스트를 저장하는 방법이 약간 씩 다르며 이는 올바른 번역을 수행하므로 로컬 운영 체제의 특이성에 대해 알 필요가 없습니다. 예를 들어, "\n"
코드가 실행되는 위치에 관계없이 개행 문자가 항상 단순으로 표시된다는 것을 알 수 있습니다.
"rb"
이 경우 번역이 적절하지 않기 때문에 텍스트가 아닌 파일을 여는 경우에 사용해야 합니다.
리눅스, 그리고 일반적으로 유닉스 "r"
와 "rb"
동일합니다. 보다 구체적으로, 텍스트 모드와 바이너리 모드에서 파일 FILE
을 fopen()
ing하여 얻은 포인터 는 Unix에서 동일한 방식으로 동작합니다. Windows 및 일반적으로 " 개행 문자 " 를 나타내는 데 두 개 이상의 문자를 사용하는 시스템 에서 텍스트 모드로 열린 파일은 모든 문자가 하나의 문자 인 것처럼 작동 '\n'
합니다.
모든 시스템에서 텍스트 파일을 이식 가능하게 읽고 쓰려면 "r"
, 및 "w"
을 사용하십시오 fopen()
. 그러면 파일이 올바르게 작성되고 읽혀집니다. 바이너리 파일을 여는 경우 "rb"
및을 사용 "wb"
하여 불행한 개행 번역으로 인해 데이터가 엉망이되지 않도록하십시오.
새 줄 변환을 수행하는 기본 시스템의 결과는 fseek (file, 0, SEEK_END)를 사용하여 파일에서 읽을 수있는 바이트 수를 결정할 수 없다는 것 입니다.
마지막으로 텍스트와 바이너리 I / O의 차이점 은 무엇입니까?를 참조하십시오 . 에 때 comp.lang.c 자주 묻는 질문 .
바이너리 파일을 열려면 "rb"를 사용하십시오. 그러면 파일을 읽을 때 파일의 바이트가 인코딩되지 않습니다.
이것은 적어도 Windows에서 차이를 만듭니다. 자세한 내용은 해당 링크를 참조하십시오.
대부분의 POSIX 시스템에서는 무시됩니다. 그러나 시스템을 확인하십시오.
XNU
모드 문자열은 또한 문자 'b'를 마지막 문자로 포함하거나 위에서 설명한 두 문자 문자열의 문자 사이의 문자로 포함 할 수 있습니다. 이것은 ISO / IEC 9899 : 1990 ( 'ISO C90')과의 호환성을위한 것이며 아무런 효과가 없습니다. 'b'는 무시됩니다.
리눅스
모드 문자열은 또한 문자 'b'를 마지막 문자로 또는 위에서 설명한 두 문자 문자열의 문자 사이의 문자로 포함 할 수 있습니다. 이것은 C89와의 호환성을위한 것이며 효과가 없습니다. Linux를 포함한 모든 POSIX 준수 시스템에서 'b'는 무시됩니다. (다른 시스템은 텍스트 파일과 이진 파일을 다르게 취급 할 수 있으며, 이진 파일에 I / O를 수행하고 프로그램이 비 UNIX 환경으로 이식 될 수 있다고 예상하는 경우 'b'를 추가하는 것이 좋습니다.)
참조 URL : https://stackoverflow.com/questions/2174889/whats-the-differences-between-r-and-rb-in-fopen
'IT TIP' 카테고리의 다른 글
emacs에서 ^ M 숨기기 (0) | 2020.12.29 |
---|---|
정적 메서드는 스레드로부터 안전합니까? (0) | 2020.12.29 |
리플렉션 (C #)을 사용하여 메서드가 재정의되었는지 감지 (0) | 2020.12.29 |
스레드가 자체적으로 교착 상태가 될 수 있습니까? (0) | 2020.12.29 |
Android에서 전역 예외 처리 사용 (0) | 2020.12.29 |