.TH errmsg 7 .SH NAME errmsg \- print diagnostics and/or abort program .SH SYNTAX .B #include \fBerrmsg_iam\fP("my_program"); // or use argv[0] \fBmsg\fP("entering phase 1"); \fBcarp\fP("there is a problem, but we'll soldier on"); \fBdie\fP(111,"fatal problem, program will abort"); \fBmsg\fP("failed to open ",filename," as expected"); \fBcarpsys\fP("failed to open ",filename); \fBdiesys\fP(111,"error opening ",filename,", bailing out"); .SH DESCRIPTION At the start of the program, call \fIerrmsg_iam\fP so the diagnostic messages will include the program name. \fImsg\fP will print to stdout (fd #1), \fIcarp\fP will print to stderr (fd #2), \fIdie\fP will print to stderr (fd #2) and then exit with the return code you specified. \fImsgsys\fP, \fIcarpsys\fP and \fIdiesys\fP will also include a string representation of the system error code in errno. By convention, fd #1 is for regular output and fd #2 is for error messages. These message are written directly to the corresponding file descriptor, without buffering. There is no need for flushing. .SH NOTE These functions do not synchronize with \fIbuffer_1\fP or \fIbuffer_2\fP. If you have pending output in a buffer, you need to flush manually first (see buffer_flush). .SH "SEE ALSO" buffer_flush(3)