이 름
setbuf, setbuffer, setlinebuf, setvbuf − 스 트 림 버 퍼 링 작 동 들
사 용 법
#include <stdio.h>
void
setbuf(FILE *stream, char *buf);
void setbuffer(FILE *stream, char
*buf, size_tsize);
void setlinebuf(FILE *stream);
int setvbuf(FILE *stream, char
*buf, int mode , size_t
size);
설 명
이 용 할 수 있 는 버 리 핑 의 3가 지 타 입 은 비 버 퍼 링 , 블 럭 버 퍼 링 그 리 고 라 인 버 퍼 링 이 다 . 출 력 스 트 림 이 비 버 퍼 링 일 때 , 정 보 는 쓰 자 마 자 목 적 파 일 이 나 터 미 널 에 나 타 난 다 .; 블 럭 버 퍼 링 일 때 많 은 문 자 들 은 블 럭 으 로 써 저 장 되 고 쓰 여 진 다 ; 라 인 버 퍼 링 일 때 문 자 들 은 뉴 라 인 이 출 력 될 때 까 지 나 터 미 널 장 치 (stdin)에 부 착 된 스 트 림 에 서 입 력 이 읽 혀 질 때 까 지 저 장 된 다 . 함 수 fflush(3)는 블 럭 을 지 우 도 록 강 요 할 때 쓰 여 진 다 .( fclose(3)를 참 조 해 라 .) 보 통 모 든 파 일 들 은 블 럭 버 퍼 링 이 다 . 처 음 I/O 작 동 들 이 파 일 에 서 일 어 날 때 , malloc(3)이 불 려 진 다 . 그 리 고 버 퍼 를 얻 는 다 . 만 일 스 트 림 이 터 미 널 에 연 계 되 어 있 다 면 (보 통 stdout 처 럼 ), 스 트 림 은 라 인 버 퍼 링 이 다 . 표 준 에 러 스 트 림 stderr 는 항 상 기 본 적 으 로 비 버 퍼 링 이 다 .
setvbuf 함 수 는 버 퍼 링 을 바 꾸 기 위 해 어 떤 때 든 지 열 려 진 스 트 림 에 사 용 될 수 있 다 . mode 인 자 는 다 음 세 매 크 로 중 하 나 이 어 야 한 다 :
_IONBF |
비 버 퍼 링 |
|||
_IOLBF |
라 인 버 퍼 링 |
|||
_IOFBF |
완 전 히 버 퍼 링 |
비 -버 퍼 링 파 일 들 을 제 외 하 고 , buf 인 자 는 적 어 도 size 바 이 트 만 큼 긴 버 퍼 를 가 리 켜 야 한 다 .; 이 버 퍼 는 현 재 버 퍼 대 신 사 용 된 다 . 만 일 인 자 buf 가 NULL이 라 면 , 단 지 모 드 만 이 영 향 을 받 는 다 ; 새 로 운 버 퍼 는 다 음 읽 고 쓰 기 작 동 시 할 당 된 다 . setvbuf 함 수 는 어 떤 때 든 지 사 용 가 능 하 지 만 ’’active’’가 아 닐 때 는 스 트 림 의 모 드 만 바 꿀 수 있 다 : 즉 , 어 떤 I/O 전 이 나 fflush호 출 바 로 후 에 .
다 른 세 함 수 는 setvbuf호 출 을 위 한 별 칭 이 다 . setbuf 함 수 는 정 확 시 다 음 호 출 과 같 다 .
setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
setbuffer 함 수 는 버 퍼 의 크 기 가 기 본 값 BUFSIZ 로 결 정 되 는 것 보 다 는 호 출 자 까 지 라 는 것 을 제 외 하 고 는 같 다 . setlinebuf 함 수 는 정 확 히 다 음 과 같 다 :
setvbuf(stream, (char *)NULL, _IOLBF, 0);
관 련 항 목
fopen(3), fclose(3), fflush(3), fread(3), malloc(3), puts(3), printf(3)
표 준
setbuf 와 setvbuf 함 수 는 ANSI C3.159-1989 (’’ANSI C’’)에 따 른 다 .
버 그
setbuffer 와 setlinebuf 함 수 는 4.2BSD 이 전 버 전 에 는 호 환 되 지 않 는 다 . 그 리 고 Linux에 서 는 이 용 할 수 없 다 . 4.2BSD와 4.3BSD 시 스 템 에 서 , setbuf 는 항 상 suboptimal 버 퍼 사 이 즈 를 사 용 해 야 하 며 피 해 져 야 한 다 .
여 러 분 은 buf 와 그 것 이 가 리 키 는 공 간 은 stream 이 닫 혀 지 는 시 간 에 도 , 프 로 그 램 종 료 시 에 도 여 전 히 존 재 하 는 곳 임 을 확 실 히 해 야 한 다 .
예 를 들 어 , 다 음 은 불 법 적 이 다 :
#include
<stdio.h>
int main()
{
char buf[BUFSIZ];
setbuf(stdin, buf);
printf("Hello, world!\n");
return 0;
}
역 자
정 강 훈 <skyeyes [AT] soback.net>, 2001년 2월 26일