Programming/C

open() 과 fopen()의 차이점

moxie2ks 2025. 3. 20. 18:01
728x90
반응형

개요

파일 작업은 C 언어에서 두 가지 주된 방법으로 수행된다. 바로 open() 함수와 fopen() 함수이다. 이 두 함수는 각각 파일을 다루는 방식이 다르며, 이로 인해 다양한 장단점이 존재한다.

파일 디스크립터 vs 파일 스트림

  • 파일 디스크립터:
    • open() 함수는 파일을 구별하기 위해 정수 번호인 파일 디스크립터를 사용한다.
    • 기본적인 입출력 기능을 수행할 수 있는 다양한 시스템 호출과 연결된다.
  • 파일 스트림:
    • fopen() 함수는 FILE 구조체를 이용하여 파일 스트림을 관리한다.
    • 더욱 다양한 타입의 데이터 처리 및 버퍼링 기능을 지원하여 편리함을 제공한다.
파일 디스크립터 (open) 파일 스트림 (fopen)
open() fopen()
close() fclose()
read() fgetc()
write() fputc()
lseek() fgets()
fcntl() fputs()
  fscanf()
  fprintf()
  fread()
  fwrite()
  ungetc()
  feof()
  ferror()
  clearerr()
  ftell()
  rewind()
  fseek()

이식성

C 표준 라이브러리를 사용하면 다양한 플랫폼에서 높은 이식성을 보장한다. 예를 들어, 특정 시스템에 종속된 함수를 사용하면 코드 수정이 발생할 수 있으나, C 표준 라이브러리는 대부분의 C 컴파일러에서 지원된다.

이를 통해 복잡함을 줄이고, 소스 코드의 재작성 필요성을 최소화한다.

이중 버퍼

fopen()는 C 표준 라이브러리에서 제공하는 버퍼와 시스템에서 제공하는 버퍼를 이중으로 사용한다. 이는 시스템 버퍼만 사용할 때 발생할 수 있는 성능 저하 문제를 완화하고, 프로그램의 안정성을 향상시킨다.

시스템 버퍼는 주로 장치 작업에 최적화되어 있으며, C 라이브러리의 버퍼는 사용자 프로그램에서의 입출력을 효율적으로 관리한다.

결론

open() 함수는 시스템 프로그래밍에 적합하며, 장치 작업에 더 가까운 지향성을 가지고 있지만,  fopen() 함수는 다룰 수 있는 데이터 타입과 처리 방식이 더 많아, 일반적인 파일 작업에 더 적합하다.

참고 문헌

fopen, open 차이

728x90
반응형