C 파일 입출력

C file input/output

C 프로그래밍 언어는 파일 입출력위한 많은 표준 라이브러리 기능을 제공합니다.이러한 함수는 C 표준 라이브러리 헤더 <stdio>의 대부분을 구성합니다.h>.[1] [2]이 기능은 1970년대 초에 Bell Labs의 Mike Lesk가 작성한 "휴대용 I/O 패키지"에서 파생되어 버전7에서 [3]Unix 운영체제의 일부가 되었습니다.

C의 I/O 기능은 최신 표준으로 보면 상당히 낮은 수준입니다.C는 모든 파일 조작을 바이트 스트림(입력 스트림 또는 출력 스트림)으로 추상화합니다.일부 초기 프로그래밍 언어와 달리 C는 랜덤 액세스 데이터 파일을 직접 지원하지 않습니다. 파일 중간에 있는 레코드에서 읽으려면 프로그래머가 스트림을 만들고 파일 중간에 검색한 다음 스트림에서 바이트를 순서대로 읽어야 합니다.

파일 I/O의 스트림 모델은 C 프로그래밍 언어 자체와 동시에 개발된 Unix에 의해 대중화되었습니다.현대 운영 체제의 대부분은 Unix로부터 스트림을 상속받았고, C 프로그래밍 언어 패밀리의 많은 언어들은 약간의 변경(예: PHP)을 수반하는 C의 파일 I/O 인터페이스를 상속받았습니다.

개요

이 라이브러리는 이른바 스트림을 사용하여 키보드, 프린터, 터미널 등의 물리 디바이스 또는 시스템에서 지원되는 다른 유형의 파일을 사용하여 작동합니다.스트림은 이러한 스트림과 균일한 방식으로 상호 작용하기 위한 추상화입니다.모든 스트림은 [4]연관된 물리적 미디어의 개별 특성과는 독립적으로 유사한 속성을 가집니다.

기능들

대부분의 C 파일 입출력 기능은 <stdio>에 정의되어 있습니다.h>(또는 표준 C 기능을 포함하고 있지만 std 네임스페이스에 있는 C++ 헤더 cstdio).

바이트
성격
넓은
성격
묘사
파일 액세스 열리다 파일을 엽니다(Windows 에서는 Unicode 이외의 파일명, Linux 에서는 UTF-8 파일명).
프리오픈 기존 스트림으로 다른 파일을 엽니다.
플러시 출력 스트림을 실제 파일과 동기화합니다.
fclose 파일을 닫습니다.
설정 파일 스트림의 버퍼를 설정합니다.
setvbuf 파일 스트림의 버퍼 및 크기를 설정합니다.
와이드 파일 스트림을 와이드 문자 I/O와 협소 문자 I/O로 전환합니다.
직접적인
입력/출력
읽다 파일에서 읽기
기입하다 파일에 쓰기
포맷되어 있지 않다
입력/출력
fgetc
취득하다
fgetwc
getwc
파일 스트림에서 바이트/wchar_t를 읽습니다.
frages (frages) fgets 파일 스트림에서 바이트/wchar_t 행을 읽습니다.
플로피 디스크
전원
fputwc
전원
파일 스트림에 바이트/wchar_t를 씁니다.
출력 출력 파일 스트림에 바이트/wchar_t 문자열을 씁니다.
취득하다 getwchar stdin에서 바이트/wchar_t를 읽습니다.
얻다 파일의 새 행 또는 끝이 나타날 때까지 stdin에서 바이트 문자열을 읽습니다(C99에서 폐지되고 C11에서 삭제됨).
풋차 풋차 stdout에 바이트/wchar_t를 씁니다.
놓다 stdout에 바이트 문자열을 씁니다.
취득하지 않다 기동하지 않다 파일 스트림에 바이트/wchar_t를 되돌립니다.
포맷 완료
입력/출력
스캔
fscanf
스캔
스캔
스캔
스캔
stdin에서 포맷된 바이트/wchar_t 입력을 읽습니다.
파일 스트림 또는 버퍼
vScanf
Vfscanf
밧세쿠폰
vwscanf
vfwscanf
vSwscanf
stdin에서 포맷된 입력 바이트/wchar_t를 읽습니다.
변수 인수 목록을 사용하는 파일 스트림 또는 버퍼
인쇄물
인쇄
스프린트
프린트
인쇄
인쇄
프린터
포맷된 바이트/wchar_t 출력을 stdout으로 출력합니다.
파일 스트림 또는 버퍼
인쇄
인쇄
vsprintf
vsnprintf
vwprintf
인쇄
vswrintf
포맷된 바이트/wchar_t 출력을 stdout으로 출력합니다.
파일 스트림 또는 변수 인수 목록을 사용하는 버퍼
에러 현재 오류에 대한 설명을 stderr에 씁니다.
파일 위치 설정 말하다
ftello
현재 파일 위치 표시기를 반환합니다.
구하다
fseeko
파일 위치 표시기를 파일의 특정 위치로 이동합니다.
fgetpos 파일 위치 표시기를 가져옵니다.
fsetpos 파일 위치 표시기를 파일의 특정 위치로 이동합니다.
되감다 파일 위치 표시기를 파일의 선두로 이동합니다.
에러
처리
보다 선명하다 에러를 클리어 합니다.
실패. 파일 끝을 확인합니다.
에러 파일 오류를 확인합니다.
운용
파일에
제거한다. 파일을 지웁니다.
이름을 바꾸다 파일 이름 변경
tmp 파일 임시 파일로 포인터를 반환합니다.
tmpnam 고유한 파일 이름을 반환합니다.

상수

<stdio>에 정의되어 있는 상수.h> 헤더에는 다음이 포함됩니다.

이름. 메모들
EOF 파일 종료 조건을 나타내는 데 사용되는 형식 int의 음수 정수입니다.
부후즈 setbuf() 함수가 사용하는 버퍼 크기인 정수
파일 이름_MAX 열 수 있는 파일의 이름을 저장할 수 있을 정도로 큰 char 배열 크기입니다.
FOPEN_MAX 동시에 열 수 있는 파일 수. 8개 이상입니다.
IOFF "input/output fully buffered"의 약자로, 오픈 스트림의 블록 버퍼링된 입출력을 요구하기 위해 setvbuf() 함수에 전달될 수 있는 정수입니다.
IOLBF "input/output line buffered"의 약자로, 오픈 스트림의 라인 버퍼링된 입출력을 요구하기 위해 setvbuf() 함수에 전달될 수 있는 정수입니다.
_IONBF "input/output not buffered"의 약자로, 오픈 스트림의 버퍼링되지 않은 입출력을 요구하기 위해 setvbuf() 함수에 전달될 수 있는 정수입니다.
L_tmpnam tmpnam() 함수에 의해 생성된 임시 파일 이름을 저장하기에 충분한 크기의 char 배열 크기
특수한 순서 null 포인터 상수로 확장되는 매크로. 즉, 메모리에 있는 개체의 유효한 주소가 아님을 보증하는 포인터 값을 나타내는 상수입니다.
시크_CUR fseek() 함수에 전달하여 현재 파일 위치에 대한 위치 지정을 요청할 수 있는 정수입니다.
검색_종료 fseek() 함수에 전달하여 파일 끝에 상대적인 위치 지정을 요구할 수 있는 정수입니다.
SEEK_SET fseek() 함수에 전달하여 파일 시작 부분에 대한 위치 지정을 요청할 수 있는 정수입니다.
TMP_MAX tmpnam() 함수로 생성할 수 있는 고유 파일명의 최대 수는 25 이상입니다.

변수

Stdstreams-notitle.svg

<stdio>에서 정의된 변수.h> 헤더에는 다음이 포함됩니다.

이름. 메모들
스틴 표준 입력 스트림(일반적으로 키보드)을 참조하는 FILE로의 포인터.
설치하다 표준 출력 스트림(일반적으로 디스플레이 터미널)을 참조하는 FILE로의 포인터.
하드 표준 에러 스트림(종종 디스플레이 터미널)을 참조하는 FILE로의 포인터.

멤버 타입

<stdio>에서 정의된 데이터 유형.h> 헤더에는 다음이 포함됩니다.

  • 파일파일 핸들이라고도 합니다.파일 핸들에는 입력 또는 출력 조작에 필요한 파일 또는 텍스트 스트림에 대한 정보가 포함되어 있습니다.다음은 예를 제시하겠습니다.
    • 연관된 I/O 디바이스의 플랫폼 고유 식별자(파일 기술자 등
    • 완충제
    • 스트림 방향 표시기(가로, 좁게 또는 넓게)
    • 스트림 버퍼링 스테이트인디케이터(버퍼 없음, 라인 버퍼링 완료, 풀 버퍼링 완료)
    • I/O 모드 표시기(입력 스트림, 출력 스트림 또는 업데이트 스트림)
    • 이진/텍스트 모드 표시기
    • 파일 종료 표시기
    • 에러 인디케이터
    • 현재 스트림 위치 및 멀티바이트 변환 상태(타입 mbstate_t의 객체)
    • 재진입 잠금(C11부터 필요)
  • fpos_t: 지원되는 모든 멀티바이트 문자 인코딩에서 발생할 수 있는 파일 내의 모든 바이트 위치 및 모든 변환 상태를 일의로 식별할 수 있는 비배열 유형
  • size_t : size of 연산자 결과 유형인 부호 없는 정수형.

내선번호

POSIX 표준은 기본 정의에서 stdio에 대한 몇 가지 확장을 정의합니다.그 중에는 메모리를 할당하는 읽기 라인 함수, FILE 개체와 파일 기술자 의 링크를 확립하는 filenofdopen 함수, 메모리 [5]내 버퍼를 참조하는 FILE 개체를 만들기 위한 함수 그룹이 있습니다.

다음 C 프로그램은 myfile이라는 바이너리 파일을 열고 5바이트를 읽은 후 파일을 닫습니다.

#실패하다 <stdio.h> #실패하다 <stdlib.h>  인트 주된(무효) {      완충 장치[5];     파일* fp = 열리다("myfile", "실패");      한다면 (fp == 특수한 순서) {         에러(파일을 열지 못했습니다.\"myfile\"");         돌아가다 EXIT_FAILURE;     }      위해서 (인트 i = 0; i < > 5; i++) {         인트 rc = 취득하다(fp);         한다면 (rc == EOF) {             출력(파일을 읽는 동안 오류가 발생했습니다.\n", 하드);             돌아가다 EXIT_FAILURE;         }                  완충 장치[i] = rc;     }      fclose(fp);      인쇄물("읽은 바이트 수는...%x %x %x %x %x\n", 완충 장치[0], 완충 장치[1],         완충 장치[2], 완충 장치[3], 완충 장치[4]);      돌아가다 종료_SUCCESS; } 

stdio의 대체 방법

stdio에 대한 몇 가지 대안이 개발되었습니다.이 중에는 ISO C++ 표준의 일부인 C++ iostream 라이브러리가 있습니다.ISO C++에서는 stdio 기능이 필요합니다.

다른 대안으로는 AT&T Bell Laboratories의 SFIO[6](Safe/Fast I/O Library) 라이브러리가 있습니다.1991년에 도입된 이 라이브러리는 규격 설계의 불일치, 안전하지 않은 관행 및 비효율성을 방지하는 것을 목적으로 합니다.스트림에 콜백 함수를 삽입하여 스트림에서 읽거나 스트림에 쓴 데이터의 처리를 [7]커스터마이즈할 수 있는 것도 특징 중 하나입니다.1997년에 외부에 발매되었고, 마지막 발매는 2005년 [8]2월 1일이었다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ ISO/IEC 9899:1999 specification (PDF). p. 274, § 7.19.
  2. ^ Kernighan, Brian; Pike, Rob (1984). The UNIX Programming Environment. Englewood Cliffs: Prentice Hall. p. 200.
  3. ^ McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
  4. ^ "(stdio.h) - C++ Reference".
  5. ^ stdio.h기본 정의 레퍼런스, 오픈 그룹의 단일 UNIX 사양, 버전 4
  6. ^ "SFIO: A Safe/Fast I/O Library". Archived from the original on 11 February 2006. Retrieved 16 March 2021.{{cite web}}: CS1 maint: bot: 원래 URL 상태를 알 수 없습니다(링크).
  7. ^ Korn, David G.; Vo, Kiem-Phong (1991). SFIO: Safe/Fast String/File IO. Proc. Summer USENIX Conf. CiteSeerX 10.1.1.51.6574.
  8. ^ Fowler, Glenn S.; Korn, David G.; Vo, Kiem-Phong (2000). Extended Formatting with Sfio. Proc. Summer USENIX Conf.

외부 링크