SETBUF
Section: 리눅스 프로그래머 매뉴얼 (3)
Updated: 1993년 11월 29일
Index
Return to Main Contents
이름
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@soback.kornet.net>, 2001년 2월 26일
Index
- 이름
-
- 사용법
-
- 설명
-
- 관련 항목
-
- 표준
-
- 버그
-
- 역자
-
This document was created by
man2html,
using the manual pages.
Time: 08:07:01 GMT, March 25, 2004