setbuf() prototype
void setbuf(FILE* stream, char* buffer);
If the buffer is not null, it is equivalent to calling setvbuf(stream, buffer, _IOFBF, BUFSIZ).
If the buffer is null, it is equivalent to calling setvbuf(stream, NULL, _IONBF, 0). In this case the buffering is turned off.
It is defined in <cstdio> header file.
setbuf() Parameters
- stream: A file stream.
- buffer: A pointer to a buffer which may be null or not. If it is null, buffering is turned off, otherwise it should of at least BUFSIZ bytes.
setbuf() Return value
None
The below 2 examples illustrates the use of setbuf() function. Both of these programs use file operation. In the first example, buffer is set using the setbuf() to store the contents of the file internally.
In the next example, the statement setbuf(fp, NULL)
turns off buffering. So in order to read the file content, fread() is used.
Example 1: How setbuf() function works
#include <iostream>
#include <cstdio>
using namespace std;
int main ()
{
char str[] = "Buffered Stream";
char buffer[BUFSIZ];
FILE *fp;
fp=fopen ("test.txt","wb");
setbuf(fp,buffer);
fwrite(str, sizeof(str), 1, fp);
fflush(fp);
fclose(fp);
cout << buffer;
return 0;
}
When you run the program, the output will be:
Buffered Stream
Example 2: setbuf() function with buffering turned off
#include <iostream>
#include <cstdio>
using namespace std;
int main ()
{
char str[] = "Unbuffered Stream";
char strFromFile[20];
FILE *fp;
fp=fopen ("test.txt","wb+");
setbuf(fp,NULL);
fwrite(str, sizeof(str), 1, fp);
fflush(fp);
/* We need to rewind the file pointer and read the file because
the data from test.txt isn't saved in any buffer */
rewind(fp);
fread(strFromFile, sizeof(strFromFile), 1, fp);
fclose(fp);
cout << strFromFile;
return 0;
}
When you run the program, the output will be:
Unbuffered Stream