본문 바로가기

C

fgetc, fputc

fgetc

파일로부터 문자를 하나씩 입력시 사용

int fgetc(FILE*); 함수의 원형, -1을 리턴하기에 int

전달인자로 주어지는 파일포인터와 연결된 파일에서 하나의 문자를 입력하여 리턴

입출력 함수를 사용하기 위해서 가장 먼저 할 일은 읽기 전용으로 파일 개방

)

fp=fopen("a.txt", "r"); 읽기 전용으로 파일 개방

ch=fgetc(fp); 개방한 파일로부터 문자 입력

스트림 파일에 첫 번째 입력 요청 발생시 하드디스크의 파일로부터 적당한 크기의 데이터를 한꺼번에 가져와 버퍼에 저장되며 이때 데이터의 크기가 버퍼의 크기보다 작으면 모든 데이터가 한번에 버퍼로 읽혀지고 fgetc 함수는 버퍼에 저장된 데이터 중에서 첫 번째 문자를 가져와(복사) 리턴

따라서 fgetc 함수가 두 번째 호출될때는 이미 버퍼에 저장된 데이터가 존재하며 가져와 리턴

fgetc 함수가 두 번째 문자를 읽지 못하므로 스트림 파일에 있는 입출력 할 버퍼의 현재 위치를 알려주는 지시자를 사용하여 데이터를 읽을 위치를 확인

위치 지시자의 값은 파일이 개방시 0으로 초기값을 가지며 입출력 함수들이 데이터를 읽거나 쓸 때 그 크기만큼 증가

버퍼의 데이터를 모두 읽으면 위치 지시자의 값은 버퍼에 저장된 데이터의 크기와 같아지며 이후 다시 fgetc 함수가 호출시 스트림파일은 하드디스크로부터 새로운 데이터를 가져와 채우며 더 이상 읽어 들일 데이터가 없으면 스트림 파일은 fgetc 함수에게 파일의 입력이 끝났음을 알려주고 fgetc 함수는 1을 리턴

)

while(1){

ch=fgetc(fp); char ch;

if(ch==EOF) break;

putchar(ch);

}

 

EOF

-1

 

fputc

하나의 문자를 파일에 출력할 때 사용

int fputc(int, FILE*); 함수의 원형

첫 번째 전달인자는 파일로 출력할 문자, 두 번째는 파일포인터와 연결된 파일로 출력

리턴값은 출력한 문자를 다시 리턴

)

fp=fopen("a.txt", "w"); 쓰기 전용

while(1){

ch=getchar(); ctrl z로 종료, 1 리턴, 키보드와 연결된 스트림 파일 사용, char ch;

if(ch==EOF) break;

fputc(ch, fp);

}

출력되는 문자가 하나씩 하드디스크의 파일에 저장되는 것이 아닌 일단 버퍼에 모아진 다음 한꺼번에 출력

따라서 버퍼의 데이터가 실제로 하드디스크에 저장되기 전 전원이 갑자기 꺼진다면 버퍼에 저장된 데이터가 사라질 위험 존재

 

표준 입출력 스트림 파일

운영체제는 프로그램이 실행될 때 기본적으로 몇 개의 스트림 파일을 만들고 이들을 키보드와 모니터 등에 연결하여 일부 입출력 함수들이 바로 이 스트림 파일을 사용하여 입출력을 수행

) getchar의 스트림 파일

스트림 파일의 이름 스트림 파일의 용도 연결된 입출력 장치
stdin 표준 입력 스트림 키보드
stdout 표준 출력 스트림 모니터
stderr 표준 에러 스트림 모니터

운영체제마다 다르지만 공통적으로 위의 3개의 스트림 파일은 개방

스트림파일의 이름은 운영체제가 만든 스트림 파일의 파일포인터

)

while(1){

ch=fgetc(stdin); ctrl z 입력시 종료, -1 리턴

if(ch==EOF) break;

fputc(ch, stdout);

}

'C' 카테고리의 다른 글

fscanf, fprintf  (0) 2024.03.30
fgets, fputs  (0) 2024.03.30
fopen, fclose  (0) 2024.03.30
스트림 파일  (0) 2024.03.28
typedef  (0) 2024.03.28