Force Buffered Data to be Written to a File Immediately in C

To force buffered data to be written to a file immediately in C, you can use functions such as fflush() to flush the file buffer or adjust the buffering mode using setbuf() or setvbuf().


Example 1: Using fflush() to Flush the Buffer

In this example, we open a file for writing, write some text to it, and immediately force the buffered data to be written to the file using fflush(). This ensures that even if the program crashes after writing, the data is not lost in the buffer.

main.c

</>
Copy
#include <stdio.h>

int main() {
    FILE *fp = fopen("example.txt", "w");
    if (fp == NULL) {
        perror("Error opening file");
        return 1;
    }

    // Write data to file
    fprintf(fp, "Hello, World! This data will be flushed immediately.");
    
    // Force buffered data to be written to the file immediately
    fflush(fp);

    fclose(fp);
    return 0;
}

Explanation:

  1. We include the stdio.h header to use file operations.
  2. We open a file named example.txt in write mode using fopen() and store the file pointer in fp.
  3. We use fprintf() to write a string to the file.
  4. The function fflush(fp) is then called to force the buffered output to be written to the file immediately.
  5. Finally, we close the file with fclose(fp) to release resources.

Output:

(The file "example.txt" will contain:
Hello, World! This data will be flushed immediately.)

Example 2: Disabling Buffering Using setbuf()

In this example, we open a file and disable buffering by using setbuf() with a NULL argument. This means that every write operation will be performed immediately without storing data in an intermediate buffer.

main.c

</>
Copy
#include <stdio.h>

int main() {
    FILE *fp = fopen("unbuffered.txt", "w");
    if (fp == NULL) {
        perror("Error opening file");
        return 1;
    }

    // Disable buffering so that data is written immediately
    setbuf(fp, NULL);

    // Write data to file
    fprintf(fp, "This data is written immediately with no buffering.");

    fclose(fp);
    return 0;
}

Explanation:

  1. We include the stdio.h header for file I/O functions.
  2. We open a file named unbuffered.txt in write mode using fopen() and store the file pointer in fp.
  3. We disable the buffering for the file by calling setbuf(fp, NULL), which sets the file stream to unbuffered mode.
  4. We write a string to the file using fprintf(). Because buffering is disabled, this write happens immediately.
  5. Finally, we close the file with fclose(fp).

Output:

(The file "unbuffered.txt" will contain:
This data is written immediately with no buffering.)

Conclusion

In this tutorial, we explored two methods to force buffered data to be written to a file immediately in C:

  1. Using fflush(): This method forces the output buffer to flush its data to the file.
  2. Disabling Buffering with setbuf(): This approach disables buffering entirely, ensuring that every write is immediate.