첫째, fdopen
if fopen
가 옵션이고 open
다른 가능한 선택 이라면 특별히 사용해야 할 이유가 없습니다 . open
를 원한다면 처음에 파일을 여는 데 사용해서는 안됩니다 FILE *
. 따라서 fdopen
그 목록에 포함 시키는 것은 다른 것들과 크게 다르기 때문에 부정확하고 혼동됩니다. 여기서 중요한 차이점은 C 표준 FILE *
과 OS 특정 파일 디스크립터 사이에 있기 때문에 무시하겠습니다 .
fopen
대신에 4 가지 주요 이유가 있습니다 open
.
fopen
는 버퍼링 IO를 제공하여 현재 수행하는 것보다 훨씬 빠를 수 있습니다 open
.
fopen
파일이 이진 모드로 열리지 않으면 줄 끝 변환을 수행합니다. 프로그램이 Unix 이외의 환경으로 이식 된 경우 세계가 LF 전용으로 수렴하는 것처럼 보이지만 (IETF 텍스트 기반 네트워킹 제외) SMTP 및 HTTP와 같은 프로토콜).
- A
FILE *
는 fscanf
다른 stdio 기능 을 사용할 수있는 기능을 제공합니다 .
- 언젠가 코드는 ANSI C 만 지원하고
open
기능을 지원하지 않는 다른 플랫폼으로 이식해야 할 수도 있습니다 .
제 생각에는 줄 끝 번역이 당신을 도와주는 것보다 더 자주 당신의 길을 가고 있습니다 fscanf
.
그리고 C를 지원하는 대부분의 플랫폼에는 open
기능이 있습니다.
그것은 버퍼링 질문을 남깁니다. 주로 파일을 순차적으로 읽거나 쓰는 곳에서 버퍼링 지원은 실제로 유용하고 속도가 크게 향상됩니다. 그러나 파일에 데이터가있을 것으로 예상 할 때 데이터가 파일에 포함되지 않는 흥미로운 문제가 발생할 수 있습니다. 당신을 기억해야 fclose
또는 fflush
적절한 시간에.
탐색을 수행하는 경우 (일명 fsetpos
또는 fseek
두 번째는 표준 호환 방식으로 사용하기가 약간 까다 로움) 버퍼링의 유용성이 빠르게 떨어집니다.
물론 내 편견은 소켓을 많이 사용하는 경향이 있으며, FILE *
버퍼링 을 전혀 사용하지 않고 비 차단 IO ( 합리적으로 지원하지 못함)를 실제로하고 싶다는 사실이 있습니다. 복잡한 파싱 요구 사항이 실제로 내 인식을 채색합니다.
fdopen
하고open
나fopen
하고open
?