Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Read/Write structure to a file in C

  • Difficulty Level : Medium
  • Last Updated : 07 Oct, 2021

Prerequisite: Structure in C
For writing in file, it is easy to write string or int to file using fprintf and putc, but you might have faced difficulty when writing contents of struct. fwrite and fread make task easier when you want to write and read blocks of data. 
 

Take a step-up from those "Hello World" programs. Learn to implement data structures like Heap, Stacks, Linked List and many more! Check out our Data Structures in C course to start learning today.
  • fwrite : Following is the declaration of fwrite function 
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr - This is pointer to array of elements to be written
size -  This is the size in bytes of each element to be written
nmemb - This is the number of elements, each one with a size of size bytes
stream - This is the pointer to a FILE object that specifies an output stream

C




// C program for writing
// struct to file
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// a struct to read and write
struct person
{
    int id;
    char fname[20];
    char lname[20];
};
 
int main ()
{
    FILE *outfile;
     
    // open file for writing
    outfile = fopen ("person.dat", "w");
    if (outfile == NULL)
    {
        fprintf(stderr, "\nError opened file\n");
        exit (1);
    }
 
    struct person input1 = {1, "rohan", "sharma"};
    struct person input2 = {2, "mahendra", "dhoni"};
     
    // write struct to file
    fwrite (&input1, sizeof(struct person), 1, outfile);
    fwrite (&input2, sizeof(struct person), 1, outfile);
     
    if(fwrite != 0)
        printf("contents to file written successfully !\n");
    else
        printf("error writing file !\n");
 
    // close file
    fclose (outfile);
 
    return 0;
}

Output: 

gcc demowrite.c
./a.out
contents to file written successfully!
  • fread : Following is the declaration of fread function 
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr - This is the pointer to a block of memory with a minimum size of size*nmemb bytes.
size - This is the size in bytes of each element to be read.
nmemb - This is the number of elements, each one with a size of size bytes.
stream - This is the pointer to a FILE object that specifies an input stream.

C




// C program for reading
// struct from a file
#include <stdio.h>
#include <stdlib.h>
 
// struct person with 3 fields
struct person
{
    int id;
    char fname[20];
    char lname[20];
};
 
// Driver program
int main ()
{
    FILE *infile;
    struct person input;
     
    // Open person.dat for reading
    infile = fopen ("person.dat", "r");
    if (infile == NULL)
    {
        fprintf(stderr, "\nError opening file\n");
        exit (1);
    }
     
    // read file contents till end of file
    while(fread(&input, sizeof(struct person), 1, infile))
        printf ("id = %d name = %s %s\n", input.id,
        input.fname, input.lname);
 
    // close file
    fclose (infile);
 
    return 0;
}

Output: 

gcc demoread.c
./a.out
id = 1   name = rohan sharma
id = 2   name = mahendra dhoni

This article is contributed by Mandeep Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.




My Personal Notes arrow_drop_up
Recommended Articles
Page :