size_t fread(void *array, size_t size, size_t count, FILE *stream)
Description:
The function reads from the stream into the array count objects of the size size.
Returns:
The function returns the number of read objects. This number may be smaller than the requested number of objects.
size_t fwrite(const void *array, size_t size, size_t count, FILE *stream)
Description:
The function writes to the stream count objects of the array having the size size.
Returns:
The function returns the number of written objects. If the return value is smaller than count, then an error happened.
Example
#include<stdio.h> #define MAX_NAME_SIZE 80 #define MAX_EMAIL_SIZE 60 #define MAX_PERSONS 10 typedef struct { char name[MAX_NAME_SIZE]; int age; double salary; char email[MAX_EMAIL_SIZE]; }Person; int main(void) { Person persons[MAX_PERSONS] = { {"Clark Kent", 30, 3250.5, "superman@krypton.com"}, {"Peter Griffin", 40, 1250.0, "birdmaster@familyguy.com"}, {"Stewie Griffin", 3, 50000.0, "world_domination@familyguy.com"}, {"Eric Cartman", 12, 50000.0, "autoritah@southpark.com"}, {"Zapp Brannigan", 30, 200.5, "stargeneral@futurama.com"}, }; Person pCopy[MAX_PERSONS]; FILE* f = NULL; int i; /*Opens the stream in <writing binary> mode*/ f = fopen("persons.bin","wb"); if(f!=NULL) { /*Writes 5 Person objects into the binary file*/ fwrite(&persons, sizeof(Person), 5, f); /*Closes the stream*/ fclose(f); /*Reopens the stream in <read binary> mode*/ f = fopen("persons.bin","rb"); if(f!=NULL) { /*Reads 5 Person objects from the binary file into another vector*/ fread(&pCopy,sizeof(Person),5,f); /*Prints the results*/ for(i = 0; i<5; i++) { printf("%s %d %f %s\n",pCopy[i].name,pCopy[i].age, pCopy[i].salary,pCopy[i].email); } /*Closes the stream*/ fclose(f); } } return 0; }
Does this work on all types of files?
ReplyDeleteAnd what if you are reading a large binary file, that is, the size is larger than the third argument of the read/write function?
To my knowledge, the read/write functions work on all binary files.
DeleteRegarding the size, the function will only read the first n entries (where n is your third argument).