버퍼링의 종류 제한하기        공부  2021. 4. 27. 02:19
반응형

스트림이 개방된 직후에( 그러나 그 스트림에 어떤 다른 명령도 수행되지 않았다. ), 당신은 setvbuf 함수를 사용해서 당신이 원하는 버퍼링의 종류를 명시적으로 지정할 수 있다. 이 절에 리스트된 도구들은 헤더파일 'stdio. h'에 선언되어 있다.

함수: int setvbuf (FILE *stream, char *buf, int mode, size_t size)

이 함수는 스트림인 stream을 버퍼링 모드인 mode를 갖도록 정하는데 사용한다. mode에는 _IOFBF(완전한 버퍼링), _IOLBF(라인 버퍼링), 이나 _IONBF( 비버퍼화된 입/출력을 위해 )들 중에서 사용할 수 있다. 만일 당신이 buf인수에 널 포인터를 정하면, setvbuf는 malloc를 사용하여 스스로 버퍼를 할당한다. 이 버퍼는 당신이 스트림을 닫을 때 해제된다. 그렇지 않으면, buf는 적어도 문자열을 저장할 수 있는 문자배열이 되어야 한다. 당신은 그 스트림이 열려진 상태로 있고, 이 배열이 버퍼 안에 남아있는 동안은 이 배열을 위해 할당된 공간을 해제할 수 없다. 당신은 버퍼를 정적으로 할당하거나, molloc을 사용해야 한다. 자동 배열을 사용하는 것은 배열을 선언한 블록이 존재하기도 전에 그 파일이 닫힐 수도 있으므로 좋은 생각이 아니다. 배열이 스트림 버퍼에 남아있는 동안 스트림 입/출력 함수는 그들의 내부의 목적들로 버퍼를 사용할 것이다. 당신은 스트림이 버퍼링을 위해 사용되고 있는 동안에는 직접적으로 그 배열의 값을 억세스하려 시도할 수 없다. setvbuf함수는 성공하면 0을 반환하고, mode의 값이 유용하지 않거나, 그 요청이 받아들여질 수 없으면 0이 아닌 값을 반환한다.

매크로 : int __IOFBF

이 매크로의 값은 정수 상수 표현으로 스트림을 완전한 버퍼로 정하기 위해서, setvbuf 함수에서 mode 인수에서 사용되어질 수 있다.

매크로 : int __IOLBF

이 매크로 값은 스트림을 라인 버퍼로 정하기 위해서 setvbuf 함수에서 mode 인수로서 사용되어질 수 있는 정수 값의 상수 표현이다.

매크로 : int __IONBF

이 매크로 값은 스트림을 비버퍼화로 정하기 위해 setvbuf함수에서 mode 인수로 사용되어질 수 있는 정수 값의 상수 표현이다.

매크로 : int BUFSIZ

이 매크로 값은 setvbuf 함수에서 size 인수로 사용되기에 좋은 정수 값의 상수 표현이다. 이 값은 적어도 256을 보장한다. BUFSIZ의 값은 입/출력 스트림을 능률적으로 만들기 위해서 각 시스템에 따라 선택된다. 그래서 당신이 setvbuf를 호출할 때 버퍼를 위한 크기로 BUFSIZ을 사용하는 것이 좋다. 실제로, 당신은 fstat( 역자주: 앙~ 뭔지 모르겠다. ) 시스템 호출의 방법으로 버퍼 크기에 사용하기 위해 더 좋은 값을 얻을 수 있다. 이것은 파일 속성의 st_blksize 필드에서 발견되어진다. 때때로 사람들은 또한 fgets( 7. 6절 [Character Input] 참조)를 사용해서 입력의 한 라인을 받아들이는데 사용되는 문자열(strings)처럼, 연관된 목적을 위해 사용하는 버퍼들의 할당 크기로 BUFSIZ를 사용한다. 효과적인 덩어리로 입/출력을 행하기 위한 것을 제외하고는, 어느 다른 정수 값 대신에 BUFSIZ을 사용할 특별한 이유가 아무 것도 없다.

함수 : void setbuf (FILE *stream, chr *buf)

만일 buf가 널 포인터라면 이 함수를 사용한 효과는 _IONBF의 모드 인수를 사용해서 setvbuf를 호출한 것과 동등하다. 그렇지 않다면, _IOFBF의 모드 인수과 BUFSIZ의 크기 인수를 사용한 buf로 setvbuf를 호출한 것과 동등하다. 그 setbuf 함수는 오래된 코드와의 호환성을 위해 제공되고 있다. ; 새로운 프로그램들은 모두 setvbuf를 사용하라.

함수 : void setbuffer (FILE *stream, char *buf, size_t size)

만일 buf가 널 포인터라면, 이 함수는 비버퍼화된 스트림을 만든다. 그렇지 않다면 이 함수는 버퍼로서 완전한 버퍼화된 스트림을 만든다. size인수는 buf의 길이를 정한다. 이 함수는 오래된 BSD 코드와의 호환성 때문에 제공되고 있다. 대신에 setvbuf를 사용하라.

함수 : void setlinebuf (FILE *stream)

이 함수는 라인 버퍼된 스트림을 만들고, 버퍼를 할당한다. 이 함수는 오래된 BSD 코드와의 호환을 위해 제공되고 있다. setvbuf를 사용하라.

반응형

'공부' 카테고리의 다른 글

MFC 다이얼로그  (0) 2021.09.10
가장 쉬운 작곡 프로그램 스튜디오 원 studio one 사용법  (0) 2021.09.03
공부 1  (0) 2021.08.19
eMule의 SearchSpam.met 편집 보기  (0) 2021.04.27
문자열과 파일 입출력  (0) 2021.04.27
무제 5  (0) 2021.04.10
무제 4  (0) 2021.03.13
무제 3  (0) 2021.02.22