Storing data in data files is central and critical to all forms of computing. 'C' offers a robust collection of file-handling functions. Let's build both file-read and file-write programs.
/* pgm14-a source WRITING to file */
#include <stdio.h>
#define TESTFILE "./secret"
int main(void) {
char *line1 = "It's TRUE! I had a date with Queen Elizabeth\n";
char *line2 = "She was a great conversationalist and quite funny.\n";
int retcode;
FILE *fileptr; // this data type is central to many file/stream functions
fileptr = fopen(TESTFILE, "w"); // "w" flags to Write to file
if (fileptr == NULL) {
perror("fopen() to write ");
return(-1);
}
// fputs() does NOT write out the string terminating NULL
retcode = fputs(line1, fileptr);
if (retcode == EOF) {
perror("fputs()");
fclose(fileptr); // we need to close what we opened
return(-1);
}
retcode = fputs(line2, fileptr);
if (retcode == EOF) {
perror("fputs()");
fclose(fileptr); // we need to close what we opened
return(-1);
}
fclose(fileptr); // we need to close what we opened
printf("\n");
return(0);
}
/* pgm14-b source READING from file */
#include <stdio.h>
#define TESTFILE "./secret"
#define STRINGLEN 128 // more than enough string storage for our examples
int main(void) {
char buf[STRINGLEN];
FILE *fileptr; // this data type is central to many file/stream functions
fileptr = fopen(TESTFILE, "r"); // "r" flags to Read from file
if (fileptr == NULL) {
perror("fopen() to read ");
return(-1);
}
printf("\n");
// fgets() ADDS the string-terminating NULL automatically
while (fgets(buf, STRINGLEN - 1, fileptr) != NULL)
printf("%s", buf);
fclose(fileptr); // we need to close what we opened
printf("\n");
return(0);
}
- Typically program arguments are used ("main(int argc, char *argv[])") INSTEAD of hard-coded filename
- It's good practice to REPORT when 'fopen()' has a problem (file missing, file permissions unexpected)
- It's a wise practice to include a 'fflush(fileptr)' call, which makes sure any pending output is written
- More error-checking is recommended at each write-to-file or read-from-file operation