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
| |