w3resource

C setvbuf() function

C library function - setvbuf()

The setvbuf() function is used to control over the buffering strategy and buffer size for a specified stream. The stream must refer to a file that has been opened, but not read or written to.

Syntax:

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

setvbuf() Parameters:

Name Description Required /Optional
stream Identifies an address for a file descriptor, which is an area of memory associated with an input or output stream. Required
buffer The system uses the buffer, which you specify, for input/output buffering instead of the default system-allocated buffer for the given stream. Required
mode A mode for file buffering Required
size Size of the buffer in bytes. Required

The Mode must be one of the following:

Mode Description
_IOFBF Full buffering is used for input and output. Use buf as the buffer and size as the size of the buffer.
_IOLBF Line buffering is used. The buffer is deleted when a new-line character is written, when the buffer is full, or when input is requested.
_IONBF No buffer is used.

Return value from setvbuf()

  • Upon successful completion, setvbuf() shall return 0.
  • Otherwise, it shall return a non-zero value if an invalid value is given for type or if the request cannot be honored, and may set errno to indicate the error.

Example: setvbuf() function

This example opens the file test.txt for writing. To create a buffer of size BUFSIZ, it calls the setbuf() function. Strings are written to the stream using the buffer buf, which contains the string before it is flushed to the file.

#include <stdio.h>
#define  BUF_SIZE  1024
 
char buf[BUF_SIZE];
FILE *stream1, *stream2;
 
int main(void)
{
   stream1 = fopen("file1.txt", "r");
   stream2 = fopen("file2.txt", "r");
 
   /* stream1 uses a user-assigned buffer of BUF_SIZE bytes */
   if (setvbuf(stream1, buf, _IOFBF, sizeof(buf)) != 0)
      printf("Wrong type or size of buffer\n");
 
   /* stream2 is unbuffered                                  */
   if (setvbuf(stream2, NULL, _IONBF, 0) != 0)
      printf("Wrong type or size of buffer\n"); 
 /*  This is a program fragment and not a complete function example  */
}

C Programming Code Editor:

Previous C Programming: C setbuf()
Next C Programming: C tmpfile()



Follow us on Facebook and Twitter for latest update.

C Programming: Tips of the Day

Reading a string with scanf :

An array "decays" into a pointer to its first element, so scanf("%s", string) is equivalent to scanf("%s", &string[0]). On the other hand, scanf("%s", &string) passes a pointer-to-char[256], but it points to the same place.

Then scanf, when processing the tail of its argument list, will try to pull out a char *. That's the Right Thing when you've passed in string or &string[0], but when you've passed in &string you're depending on something that the language standard doesn't guarantee, namely that the pointers &string and &string[0] -- pointers to objects of different types and sizes that start at the same place -- are represented the same way.

Ref : https://bit.ly/3pdEk6f