[Linux] C 표준 입출력 라이브러리 함수(2)

5. getc(3), fgetc(3), getchar(3) + ungetc(3)

#include<stdio.h>
int getc(FILE* fp);
int fgetc(FILE* fp);
int getchar();
int ungetc(int c, FILE* fp);

@param fp: 파일 스트림형 포인터

@return: 성공시 다음 문자를 int로 변환하여 리턴, 파일 끝이나 에러시 EOF 리턴

 

한 번에 하나의 문자를 읽는 라이브러리 함수. getc()와 fgetc()는 주어진 스트림형 포인터에서 한 문자씩 읽고 int로 변환한 다음 리턴하고 매크로와 함수로 구현되었다는 차이가 있다. getchar()는 stdin으로부터 문자 하나를 입력받는다.

 

#include<stdio.h>
#include<stdlib.h>

int main() {

	int character;
	while((character = getc(stdin)) != EOF) //feof()함수를 사용해도 된다
		if(putc(character, stdout) == EOF) {
			fprintf(stderr, "standard output error\n");
			exit(1);
		}
	if(ferror(stdin)) {
		fprintf(stderr, "standard input error\n");
		exit(1);
	}
	exit(0);
	
}

ungetc는 매개변수의 문자를 unsigned char형으로 입력 스트림에 리턴. ungetc를 올바르게 사용하기 위해서는 getc로 읽은 문자를 매개변수로 다시 넣어주어야 함.

 

 

 

 

6. ferror(3), feof(3), clearerr(3)

#include<stdio.h>
int ferror(FILE* fp);
int feof(FILE* fp);
void clearerr(FILE* fp);

@param fp: 파일 스트림형 포인터

@return: 조건이 참이면 1(error/eof), 조건이 거짓이면 0

 

ferror: 주어진 파일 스트림의 읽기/쓰기시 에러를 검사.

feof: EOF(-1)를 별도 구분하지 않는 함수를 위해서 종료의 원인이 EOF인지 구분하는데 사용

clearerr: 주어진 파일 스트림의 에러플래그와 EOF플래그를 재설정(초기화). 사실 직접 에러나 EOF를 검사하는 것이 아니라 파일스트림 포인터상의 플래그를 검사하는 것인데, 이를 초기화해준다.

 

 

7. putc(3), fputc(3), putchar(3)

#include<stdio.h>
int putc(int c, FILE* fp);
int fputc(int c, FILE* fp);
int putchar(int c);

지정된 파일 스트림에 하나의 문자를 쓰는 기능을 수행하는 라이브러리 함수. getc/fgetc와 유사하게 putc/fputc는 구현 방법(매크로/함수)의 차이만 존재하며, putchar는 stdout으로 문자를 하나 출력하는 함수이다. 

 

 

 

8. fgets(3), gets(3)

#include<stdio.h>
char* fgets(char* buf, int n, FILE* fp);
char* gets(char* buf);

@return: 성공시 buf, 에러시 NULL 반환

 

fgets() : 줄 단위 입력에 사용되는 라이브러리 함수. 개행 문자나 EOF에 도달할까지 파일포인터(or stdin)으로부터 읽어 인자 buf에 저장한다 . 만약 한 라인이 n보다 길다면 n-1개의 문자만 읽게 된다. (마지막은 NUL로 채워야하기 때문)

gets() : stdin으로 들어온 입력으로부터 개행문자나 EOF를 만날 때까지 문자를 읽고 buf에 저장. fgets와 다르게 입력받는 문자의 수에 제한을 두지 않기 때문에 버퍼를 초과하여 문자를 입력하면 에러가 발생한다.

 

+scanf, fgets, fgets : scanf는 문자열 사이의 공백도 분할기준에 들어가고, gets, getchar는 주소값을 넘겨주면 된다.

 

9. fputs(3), puts(3)

#include<stdio.h>
int fputs(const char* str, FILE* fp);
int puts(const char* str);

@return: 성공시 음이아닌값, 에러시 EOF 반환

 

fputs() : str이 가리키는 문자열을 인자로 지정된 파일 포인터(fp)로 NULL문자를 제외하고 출력. 자동개행 X

puts() : str이 가리키는 문자열을 stdout에 출력. 자동개행 O