.lf 1 ./man/man3/explain_write.3 .\" .\" libexplain - Explain errno values returned by libc functions .\" Copyright (C) 2008, 2009, 2011 Peter Miller .\" Written by Peter Miller .\" .\" This program is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 3 of the License, or .\" (at your option) any later version. .\" .\" This program is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU .\" General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with this program. If not, see . .\" .ds n) explain_write .cp 0 \" Solaris defaults to ''.cp 1'', sheesh. .TH explain_write 3 .SH NAME explain_write \- explain write(2) errors .if require_index \{ .\} .SH SYNOPSIS #include .br const char *explain_write(int fildes, const void *data, long data_size); .br const char *explain_errno_write(int errnum, int fildes, const void *data, long data_size); .br void explain_message_write(char *message, int message_size, int fildes, const void *data, long data_size); .br void explain_message_errno_write(char *message, int message_size, int errnum, int fildes, const void *data, long data_size); .SH DESCRIPTION These functions may be used to obtain explanations for \f[I]write\fP(2) errors . .\" ------------------------------------------------------------------------ .SS explain_write const char *explain_write(int fildes, const void *data, long data_size); .PP The explain_write function may be used to obtain a human readable explanation of what went wrong in a \f[I]write\fP(2) system call. The least the message will contain is the value of \f[CR]strerror(errno)\fP, but usually it will do much better, and indicate the underlying cause in more detail. .PP The error number will be picked up from the \f[I]errno\fP global variable. .PP This function is intended to be used in a fashion similar to the following example: .RS .nf .ft CR sszie_t n = write(fd, data, data_size); if (n < 0) { fprintf(stderr, '%s\n', explain_read(fd, data, data_size)); exit(EXIT_FAILURE); } .fi .ft R .RE .TP 8n \f[I]fildes\fP The original fildes, exactly as passed to the \f[I]write\fP(2) system call. .TP 8n \f[I]data\fP The original data, exactly as passed to the \f[I]write\fP(2) system call. .TP 8n \f[I]data_size\fP The original data_size, exactly as passed to the \f[I]write\fP(2) system call. .TP 8n Returns: The message explaining the error. This message buffer is shared by all libexplain functions which do not supply a buffer in their argument list. This will be overwritten by the next call to any libexplain function which shares this buffer, including other threads. .PP \f[B]Note:\fP This function is \f[B]not\fP thread safe, because it shares a return buffer across all threads, and many other functions in this library. .\" ------------------------------------------------------------------------ .SS explain_errno_write const char *explain_errno_write(int errnum, int fildes, const void *data, long data_size); .PP The explain_errno_write function may be used to obtain a human readable explanation of what went wrong in a \f[I]write\fP(2) system call. The least the message will contain is the value of \f[CR]strerror(errnum)\fP, but usually it will do much better, and indicate the underlying cause in more detail. .PP This function is intended to be used in a fashion similar to the following example: .RS .ft CR .nf sszie_t n = write(fd, data, data_size); if (n < 0) { int err = errno; fprintf(stderr, '%s\n', explain_errno_read(errnum, fd, data, data_size)); exit(EXIT_FAILURE); } .fi .ft R .RE .TP 8n \f[I]errnum\fP The error value to be decoded, usually obtain from the \f[I]errno\fP global variable just before this function is called. This is necessary if you need to call \f[B]any\fP code between the system call to be explained and this function, because many libc functions will alter the value of \f[I]errno\fP. .TP 8n \f[I]fildes\fP The original fildes, exactly as passed to the \f[I]write\fP(2) system call. .TP 8n \f[I]data\fP The original data, exactly as passed to the \f[I]write\fP(2) system call. .TP 8n \f[I]data_size\fP The original data_size, exactly as passed to the \f[I]write\fP(2) system call. .TP 8n Returns: The message explaining the error. This message buffer is shared by all libexplain functions which do not supply a buffer in their argument list. This will be overwritten by the next call to any libexplain function which shares this buffer, including other threads. .PP \f[B]Note:\fP This function is \f[B]not\fP thread safe, because it shares a return buffer across all threads, and many other functions in this library. .\" ------------------------------------------------------------------------ .SS explain_message_write void explain_message_write(char *message, int message_size, int fildes, const void *data, long data_size); .PP The explain_message_write function may be used to obtain a human readable explanation of what went wrong in a \f[I]write\fP(2) system call. The least the message will contain is the value of \f[CR]strerror(errno)\fP, but usually it will do much better, and indicate the underlying cause in more detail. .PP The error number will be picked up from the \f[I]errno\fP global variable. .PP This function is intended to be used in a fashion similar to the following example: .RS .nf .ft CR sszie_t n = write(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); } .fi .ft R .RE .TP 8n \f[I]message\fP The location in which to store the returned message. Because a message return buffer has been supplied, this function is thread safe. .TP 8n \f[I]message_size\fP The size in bytes of the location in which to store the returned message. .TP \f[I]fildes\fP The original fildes, exactly as passed to the \f[I]write\fP(2) system call. .TP 8n \f[I]data\fP The original data, exactly as passed to the \f[I]write\fP(2) system call. .TP 8n \f[I]data_size\fP The original data_size, exactly as passed to the \f[I]write\fP(2) system call. .PP \f[B]Note:\fP Given a suitably thread safe buffer, this function is thread safe. .\" ------------------------------------------------------------------------ .SS explain_message_errno_write void explain_message_errno_write(char * message, int message_size, int errnum, int fildes, const void *data, long data_size); .PP The explain_message_errno_write function may be used to obtain a human readable explanation of what went wrong in a \f[I]write\fP(2) system call. The least the message will contain is the value of \f[CR]strerror(errnum)\fP, but usually it will do much better, and indicate the underlying cause in more detail. .PP This function is intended to be used in a fashion similar to the following example: .RS .nf .ft CR sszie_t n = write(fd, data, data_size); if (n < 0) { int err = errno; char message[3000]; explain_message_errno_read(message, sizeof(message), errno, fd, data, data_size)); fprintf(stderr, '%s\n', message); exit(EXIT_FAILURE); } .fi .ft R .RE .TP 8n \f[I]message\fP The location in which to store the returned message. Because a message return buffer has been supplied, this function is thread safe. .TP 8n \f[I]message_size\fP The size in bytes of the location in which to store the returned message. .TP 8n \f[I]errnum\fP The error value to be decoded, usually obtain from the \f[I]errno\fP global variable just before this function is called. This is necessary if you need to call \f[B]any\fP code between the system call to be explained and this function, because many libc functions will alter the value of \f[I]errno\fP. .TP 8n \f[I]fildes\fP The original fildes, exactly as passed to the \f[I]write\fP(2) system call. .TP 8n \f[I]data\fP The original data, exactly as passed to the \f[I]write\fP(2) system call. .TP 8n \f[I]data_size\fP The original data_size, exactly as passed to the \f[I]write\fP(2) system call. .PP \f[B]Note:\fP Given a suitably thread safe buffer, this function is thread safe. .\" ------------------------------------------------------------------------ .SH COPYRIGHT .lf 1 ./etc/version.so .ds v) 1.4 .ds V) 1.4.D001 .ds Y) 2008, 2009, 2010, 2011, 2012, 2013, 2014 .lf 248 ./man/man3/explain_write.3 .if n .ds C) (C) .if t .ds C) \(co libexplain version \*(v) .br Copyright \*(C) 2008 Peter Miller .SH AUTHOR Written by Peter Miller