explain_read(3) | Library Functions Manual | explain_read(3) |
explain_read - explain read(2) errors
#include <libexplain/read.h>
const char *explain_read(int fildes, const void *data, long data_size);
const char *explain_errno_read(int errnum, int fildes, const void *data, long
data_size);
void explain_message_read(char *message, int message_size, int fildes, const
void *data, long data_size);
void explain_message_errno_read(char *message, int message_size, int errnum,
int fildes, const void *data, long data_size);
These functions may be used to obtain an explanation for read(2) errors.
const char *explain_read(int fildes, const void *data, long data_size);
The explain_read function may be used to obtain a human readable explanation of what went wrong in a read(2) system call. The least the message will contain is the value of strerror(errno), but usually it will do much better, and indicate the underlying cause in more detail.
The error number will be picked up from the errno global variable.
This function is intended to be used in a fashion similar to the following example:
ssize_t n = read(fd, data, data_size); if (n < 0) {
fprintf(stderr, "%s\n", explain_read(fd, data, data_size));
exit(EXIT_FAILURE); }
Note: This function is not thread safe, because it shares a return buffer across all threads, and many other functions in this library.
const char *explain_errno_read(int errnum, int fildes, const void *data, long data_size);
The explain_errno_read function may be used to obtain a human readable explanation of what went wrong in a read(2) system call. The least the message will contain is the value of strerror(errnum), but usually it will do much better, and indicate the underlying cause in more detail.
This function is intended to be used in a fashion similar to the following example:
ssize_t n = read(fd, data, data_size); if (n < 0) {
int err = errno;
fprintf(stderr, "%s\n", explain_errno_read(err, fd, data, data_size));
exit(EXIT_FAILURE); }
Note: This function is not thread safe, because it shares a return buffer across all threads, and many other functions in this library.
void explain_message_read(char *message, int message_size, int fildes, const void *data, long data_size);
The explain_message_read function may be used to obtain a human readable explanation of what went wrong in a read(2) system call. The least the message will contain is the value of strerror(errno), but usually it will do much better, and indicate the underlying cause in more detail.
The error number will be picked up from the errno global variable.
This function is intended to be used in a fashion similar to the following example:
ssize_t n = read(fd, data, data_size); if (n < 0) {
char message[3000];
explain_message_read(message, sizeof(message), fd, data, data_size));
fprintf(stderr, "%s\n", message);
exit(EXIT_FAILURE); }
Note: Given a suitably thread safe buffer, this function is thread safe.
void explain_message_errno_read(char *message, int message_size, int errnum, int fildes, const void *data, long data_size);
The explain_message_errno_read function may be used to obtain a human readable explanation of what went wrong in a read(2) system call. The least the message will contain is the value of strerror(errnum), but usually it will do much better, and indicate the underlying cause in more detail.
This function is intended to be used in a fashion similar to the following example:
ssize_t n = read(fd, data, data_size); if (n < 0) {
int err = errno;
char message[3000];
explain_message_errno_read(message, sizeof(message), err,
fd, data, data_size);
fprintf(stderr, "%s\n", message);
exit(EXIT_FAILURE); }
Note: Given a suitably thread safe buffer, this function is thread safe.
libexplain version 1.4
Copyright (C) 2008 Peter Miller
Written by Peter Miller <pmiller@opensource.org.au>