setvbuf
From cppreference.com
Defined in header
<stdio.h>
|
||
(until C99) | ||
(since C99) | ||
Sets the internal buffer of the given file stream stream
.
Contents |
[edit] Parameters
stream | - | the file stream to set the buffer to | ||||||
buffer | - | pointer to a buffer for the stream to use | ||||||
mode | - | buffering mode to use. It can be one of the following values:
|
||||||
size | - | size of the buffer |
[edit] Return value
0 on success or nonzero on failure.
[edit] Notes
This function may only be used after stream
has been associated with an open file, but before any other operation.
buffer
may be null, in which case this call only resizes the internal buffer.
[edit] Example
setvbuf with error checking
Run this code
#include <stdio.h> #include <stdlib.h> int main(void) { int file_size; char buffer[BUFSIZ]; FILE * fp = fopen("test.txt","w+"); if (setvbuf(fp,buffer,_IOFBF,BUFSIZ) != 0) { perror("setvbuf()"); fprintf(stderr,"setvbuf() failed in file %s at line # %d\n", __FILE__,__LINE__-3); exit(EXIT_FAILURE); } /* Exhibit the contents of buffer. */ fputs ("aaa",fp); printf("%s\n", buffer); fputs ("bbb",fp); printf("%s\n", buffer); fputs ("ccc",fp); printf("%s\n", buffer); file_size = ftell(fp); printf("file_size = %d\n", file_size); fflush (fp); /* flush buffer */ printf("%s\n", buffer); fputs ("ddd",fp); printf("%s\n", buffer); fputs ("eee",fp); printf("%s\n", buffer); rewind(fp); /* flush buffer and rewind file */ char buf[20]; fgets(buf,sizeof buf,fp); printf("%s\n", buf); fclose(fp); return 0; }
Output:
aaa aaabbb aaabbbccc file_size = 9 aaabbbccc dddbbbccc dddeeeccc aaabbbcccdddeee
[edit] See also
sets the buffer for a file stream (function) |
|
C++ documentation for setvbuf
|