SETBUF(3) | 리눅스 프로그래머 매뉴얼 | SETBUF(3) |
이름¶
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 함수는 정확시 다음 호출과 같다.
setbuffer 함수는 버퍼의 크기가 기본값 BUFSIZ 로 결정되는것 보다는 호출자까지라는 것을 제외하고는 같다. setlinebuf 함수는 정확히 다음과 같다:
관련 항목¶
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@soback.kornet.net>, 2001년 2월 26일
1993년 11월 29일 | BSD MANPAGE |