tail head cat sleep
QR code linking to this page

Man page  — SETBUF

명칭

setbuf, setbuffer, setlinebuf, setvbuf – 스트림 버퍼링 조작

내용

프로그램 라이브러리

Standard C Library (libc, -lc)

서식

#include <stdio.h>

void
setbuf(FILE *stream, char *buf);

void
setbuffer(FILE *stream, char *buf, int size);

int
setlinebuf(FILE *stream);

int
setvbuf(FILE *stream, char *buf, int mode, size_t size);

해설

이용할 수 있는 3 타입의 버퍼링은, 버퍼링 이루어, 블록 버퍼링, 및 행 버퍼링입니다. 출력 스트림이 버퍼링 없음의 경우, 정보는 기입해지면(자) 즉시 기입해 앞파일이나 단말에 표시됩니다. 출력 스트림이 블록 버퍼링의 경우, 다수의 캐릭터가 축적되고 블록으로서 기입해집니다. 출력 스트림이 행 버퍼링의 경우, 개행이 출력되는지, 또는 단말 디바이스에 아탓치 된 임의의 스트림 (통상은 stdin)(으)로부터 입력이 읽힐 때까지, 캐릭터를 저축할 수 있습니다. 함수 fflush(3) (을)를 사용해, 빨리 블록의 출력을 강제할 수도 있습니다 ( fclose(3) (을)를 참조).

통상, 모든 파일은 블록 버퍼링 됩니다. 파일에 대해서 최초의 입출력 조작이 발생했을 때, malloc(3) 하지만 불려 가 최적인 사이즈의 버퍼가 획득됩니다. ( stdout 하지만 통상 실시하도록(듯이)) 스트림이 단말을 참조하는 경우는 행 버퍼링입니다. 표준 에러 스트림 stderr (은)는 항상 버퍼링 없음입니다.

setvbuf() 함수는, 스트림의 버퍼링 동작을 변경하는데 사용할 수 있습니다. mode 파라미터는 다음의 3 개의 매크로의 어떤 것인가 나오지 않으면 안됩니다.
_IONBF
  버퍼링 없음
_IOLBF
  행 버퍼링
_IOFBF
  완전 버퍼링

size 파라미터는, 최적 사이즈의 버퍼를 언제나 대로에 지연 할당 시키기 위해서(때문에) 0 으로 설정할 수 있습니다. 이 파라미터가 0 이 아닌 경우, 버퍼링 없음의 파일을 제외하면, buf 인수는 적어도 길이가 size 바이트의 버퍼를 가리키지 않으면 안됩니다. 이 버퍼가 현재의 버퍼 대신에 사용됩니다 ( size 인수가 0 이 아니기는 하지만, buf 하지만 NULL 의 경우, 지정 사이즈의 버퍼가 즉시 할당해져 클로우즈시에 해방됩니다. 이것은 ANSI C 의 확장입니다. 이식 가능 코드는 사이즈가 0 의 NULL 버퍼를 사용할 것입니다).

setvbuf() 함수는 언제라도 사용할 수 있습니다만, 스트림이 ``액티브''경우에, (예를 들어, 입력의 잘라서 버림이나 출력의 플래시등의) 기묘한 부작용을 가지는 일이 있습니다. 이식 가능한 어플리케이션은, 하등의 입출력 하지만 실행되기 전에, 지정된 임의의 스트림에 대해서 이 함수를 한 번만 호출해야 합니다.

다른 3 개의 호출은, 실제로는, setvbuf() 호출의 별명에 지나지 않습니다. 반환값이 없는 것을 제외해, setbuf() 함수는 이하의 호출과 엄밀하게 같습니다.

    setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);

setbuffer() 함수는, 버퍼의 사이즈를 호출해 원이 결정해 디폴트의 BUFSIZ 그리고 결정되는 것은 아닌 것 이외는 같습니다. setlinebuf() 함수는, 다음의 호출과 엄밀하게 같습니다.

    setvbuf(stream, (char *) NULL, _IOLBF, 0);

반환값

setvbuf() 함수는 정상 종료하면(자) 0 을 돌려줍니다. 요구가 받아들여지지 않는 경우는 EOF (을)를 돌려줍니다 (스트림은 이 경우에서도 여전히 기능하고 있는 것에 주의해 주세요).

setlinebuf() 함수는, 동등의 setvbuf() 호출이 돌려주었음이 분명한 값을 돌려줍니다.

관련 항목

fclose(3), fopen(3), fread(3), malloc(3), printf(3), puts(3) [영어]

표준

setbuf() 함수와 setvbuf() 함수는 ISO/IEC 9899:1990 ("ISO C90") 에 적합하고 있습니다.

버그

setbuffer() 함수와 setlinebuf() 함수는, BSD 4.2 보다 전의 버젼의 BSD 에 이식 가능하지는 않습니다. BSD 4.2 시스템과 BSD 4.3 시스템에서는, setbuf() (은)는, 최적이지 않는 버퍼 사이즈를 항상 사용하므로, 피해 주세요.

SETBUF (3) June 4, 1993

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.