File Input and Output (I/O) in C Programming

Cover Image for File Input and Output (I/O) in C Programming

File Input/Output (I/O) is a core aspect of C programming, allowing you to interact with files stored on disk. In this article, we'll embark on a journey through the realm of File I/O, understanding how to create, open, close, read, and write files. We'll also delve into the concepts of file descriptors, system calls, and the distinctions between functions and system calls. By mastering File I/O, you'll wield the ability to manage data persistence and manipulation with finesse in your C programs.

Navigating the Basics of File I/O

  • Creating Files: Use the fopen function to create and open files.

  • Closing Files: Employ the fclose function to close opened files.

  • Reading Files: Utilize the fread function to read data from files.

  • Writing Files: Employ the fwrite function to write data to files.

Reading from a File

To read data from a file, you can use functions like fscanf or fgets. Here's an example of reading data from a text file:

#include <stdio.h>

int main() {
    FILE *file = fopen("data.txt", "r"); // Open file for reading

    if (file == NULL) {
        printf("File not found or could not be opened\n");
        return 1;
    }

    int num;
    while (fscanf(file, "%d", &num) != EOF) {
        printf("Read: %d\n", num);
    }

    fclose(file); // Close the file

    return 0;
}

Writing to a File

To write data to a file, you can use functions like fprintf or fputs. Here's an example of writing data to a text file:

#include <stdio.h>

int main() {
    FILE *file = fopen("output.txt", "w"); // Open file for writing

    if (file == NULL) {
        printf("File could not be opened\n");
        return 1;
    }

    fprintf(file, "Hello, world!\n");
    fputs("This is a line of text.", file);

    fclose(file); // Close the file

    return 0;
}

Binary File I/O

In addition to text files, C also supports binary file I/O using functions like fread and fwrite. Binary file I/O is used when you need to store or retrieve data in its raw binary form.

Understanding File Descriptors and Standard File Descriptors

File Descriptors are integer values used to identify open files in a process. The three standard file descriptors are:

  • Standard Input (stdin): File descriptor 0 (STDIN_FILENO), used for input.

  • Standard Output (stdout): File descriptor 1 (STDOUT_FILENO), used for normal output.

  • Standard Error (stderr): File descriptor 2 (STDERR_FILENO), used for error messages.

Exploring I/O System Calls and Flags

I/O System Calls, such as open, close, read, and write, allow low-level interactions with files. Flags like O_RDONLY, O_WRONLY, and O_RDWR dictate read and write permissions when opening files.

Navigating File Permissions and System Calls

File permissions determine who can access and modify files. When creating a file with the open system call, you can use flags and the mode argument to set permissions.

Deciphering System Calls and Functions

A system call is an interface provided by the operating system for programs to request services. It's a low-level mechanism that facilitates interactions between user-level code and the kernel. In contrast, functions are higher-level constructs provided by libraries to simplify programming tasks.

Conclusion

File Input/Output operations are a cornerstone of C programming, enabling data persistence and manipulation. By delving into File I/O, you're equipped to create programs that interact with files on disk, making your software more versatile and practical.

As you continue to explore File I/O and its intricacies, you're enhancing your programming toolkit and becoming more adept at managing data across different scenarios.

Keep experimenting, learning, and applying File I/O techniques—it's through continuous practice that you elevate your programming journey!