Skip to content
Home » My Blog Tutorial » Error Handling in C: Mastering errno, perror, and File I/O

Error Handling in C: Mastering errno, perror, and File I/O

Files & Error Handling in C Language

Harnessing the Power of errno

The errno variable is a fundamental tool for error handling in C. It’s defined in the errno.h header file and is set by various library functions when they encounter errors.

Implementing errno in Your Code

To use errno effectively, follow these steps:

  1. Include the necessary header files:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

2. Declare errno at the top of your program:

extern int errno;

3. Set errno to 0 before calling a library function:

errno = 0;


4. Check for errors and handle them appropriately:

FILE *fptr = fopen("nonexistent.txt", "r");
if (fptr == NULL) {
    fprintf(stderr, "Error opening file. Error code: %d\n", errno);
    exit(EXIT_FAILURE);
}

Enhancing Error Messages with perror and strerror

While errno provides error codes, perror and strerror functions offer more descriptive error messages.

Using perror for Informative Error Output

The perror function prints a descriptive error message to stderr:

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main() {
    FILE *fptr = fopen("nonexistent.txt", "r");
    if (fptr == NULL) {
        fprintf(stderr, "Error: %s\n", strerror(errno));
        exit(EXIT_FAILURE);
    }
    // File operations...
    fclose(fptr);
    return 0;
}

Leveraging strerror for Custom Error Handling

The strerror function returns a pointer to the error message string:

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main() {
    FILE *fptr = fopen("nonexistent.txt", "r");
    if (fptr == NULL) {
        fprintf(stderr, "Error: %s\n", strerror(errno));
        exit(EXIT_FAILURE);
    }
    // File operations...
    fclose(fptr);
    return 0;
}

Mastering File I/O Error Detection

When working with files, it’s crucial to detect and handle errors properly. The feof and ferror functions are invaluable tools for this purpose.

Detecting End-of-File with feof

Use feof to check if you’ve reached the end of a file:

#include <stdio.h>

int main() {
    FILE *fptr = fopen("example.txt", "r");
    if (fptr == NULL) {
        perror("Error opening file");
        return 1;
    }

    int c;
    while ((c = fgetc(fptr)) != EOF) {
        putchar(c);
    }

    if (feof(fptr)) {
        printf("\nEnd of file reached successfully.\n");
    }

    fclose(fptr);
    return 0;
}

Identifying I/O Errors with ferror

The ferror function helps detect I/O errors during file operations:

#include <stdio.h>

int main() {
    FILE *fptr = fopen("example.txt", "r");
    if (fptr == NULL) {
        perror("Error opening file");
        return 1;
    }

    // Perform file operations...

    if (ferror(fptr)) {
        fprintf(stderr, "An I/O error occurred while reading the file.\n");
        clearerr(fptr);
    }

    fclose(fptr);
    return 0;
}


By mastering these error handling techniques, you’ll be able to write more robust C programs that gracefully handle unexpected situations and provide meaningful feedback to users.

For more information on C programming and error handling, check out this comprehensive guide on C error handling.


Discover more from teguhteja.id

Subscribe to get the latest posts sent to your email.

1 thought on “Error Handling in C: Mastering errno, perror, and File I/O”

  1. Pingback: C Intermediate Programming - teguhteja.id

Leave a Reply

Optimized by Optimole
WP Twitter Auto Publish Powered By : XYZScripts.com

Discover more from teguhteja.id

Subscribe now to keep reading and get access to the full archive.

Continue reading