fwrite()

Updated: April 19, 2023

Write elements to a file

Synopsis:

#include <stdio.h>

size_t fwrite( const void* buf,
               size_t size,
               size_t num,
               FILE* fp );

Arguments:

buf
A pointer to a buffer that contains the elements that you want to write.
size
The size of each element to write.
num
The number of elements to write.
fp
The stream to which to write the elements.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The fwrite() function writes num elements of size bytes each to the stream specified by fp.

Note: If you're reading and writing large amounts of data, you can improve performance by increasing the size of the internal buffer that's used for stream I/O. For more information, see Adjusting the buffer size in the entry for fopen().

Returns:

The number of complete elements successfully written. If an error occurs, this is less than num, and errno is set to indicate the type of error.

Errors:

EAGAIN
The O_NONBLOCK flag is set for the file descriptor underlying fp, and the process would be delayed in the write operation.
EBADF
The file descriptor underlying fp isn't a valid file descriptor that's open for writing.
EFBIG
One of the following:
  • An attempt was made to write a file that exceeds the maximum file size.
  • The file is a regular file, and an attempt was made to write at or beyond the offset maximum associated with the corresponding stream.
EINTR
The write operation was terminated due to the receipt of a signal, and no data was transferred.
EIO
One of the following:
  • A physical I/O error occurred.
  • The process is in a background process group attempting to write to its controlling terminal, and either the process is ignoring or blocking the SIGTTIN signal or the process group is orphaned.
  • (QNX Neutrino extension) The filesystem resides on a removable media device, and the media has been forcibly removed.
ENXIO
A request was made of a nonexistent device, or the request was outside the capabilities of the device.
ENOSPC
There was no free space remaining on the device containing the file.
EPIPE
An attempt was made to write to a pipe or FIFO that wasn't open for reading by any process. A SIGPIPE signal is also sent to the thread.

Examples:

#include <stdio.h>
#include <stdlib.h>

struct student_data {
    int student_id;
    unsigned char marks[10];
};

int main( void )
{
    FILE *fp;
    struct student_data std;
    int i;

    fp = fopen( "file", "w" );
    if( fp != NULL ) {
        std.student_id = 1001;

        for( i = 0; i < 10; i++ ) {
            std.marks[i] = (unsigned char)(85 + i);
        }

        /* write student record with marks */
        i = fwrite( &std, sizeof( struct student_data ), 1, fp );
        printf( "Successfully wrote %d records\n", i );

        fclose( fp );
        
        if( i == 1 ) {
            return EXIT_SUCCESS;
        }
    }

    return EXIT_FAILURE;
}

Classification:

ANSI, POSIX 1003.1

Safety:  
Cancellation point Yes
Interrupt handler No
Signal handler No
Thread Yes