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 |