📄 errpkge.varargs
字号:
/*---------------------------------------------------------------------- * Copyright (c) Colorado School of Mines, 1989. * All rights reserved. * * This code is part of SU. SU stands for Seismic Unix, a processing line * developed at the Colorado School of Mines, partially based on Stanford * Exploration Project (SEP) software. Inquiries should be addressed to: * * Jack K. Cohen, Center for Wave Phenomena, Colorado School of Mines, * Golden, CO 80401 (isis!csm9a!jkcohen) *---------------------------------------------------------------------- */#include <varargs.h>#include "par.h"/* errpkge - routines for reporting errors * * err - print warning on application program error and die * warn - print warning on application program error * syserr - print warning on a system error and die * syswarn - print warning on a system error * * Returns: * err - void * warn - void * syserr - void * syswarn - int: errno * * Synopsis: * void err(format, args) * format - a printf format string ("\n" not needed) * args - the variables referenced in the format string * * void warn(format, args) * format - a printf format string ("\n" not needed) * args - the variables referenced in the format string * * void syserr(format, args) * format - a printf format string ("\n" not needed) usually * giving the name of the offending system call * args - the variables referenced in the format string, often * just an offending file name * * int syswarn(format, args) * format - a printf format string ("\n" not needed) usually * giving the name of the offending system call * args - the variables referenced in the format string, often * just an offending file name * * * Credits: * Kernighan and Pike, "The UNIX Programming Environment", page 207. * Also Rochkind, "Advanced UNIX Programming", page 13. * SEP: Jeff Thorson, Stew * CWP: Shuki, Jack * * Examples: * err("Cannot divide %f by %f", x, y); * warn("fmax = %f exceeds half nyquist= %f", fmax, 0.25/dt); * * if (-1 == (fd = open(xargv[1], O_RDONLY))) * syserr("can't open %s", xargv[1]); * ... * if (-1 == close(fd)) * syserr("close failed"); * * ... * if (-1 == (fd = open(xargv[j], O_RDONLY))) * syswarn("can't open %s, processing next file", * xargv[j]); * continue; * ... * * *//* For syserr() and syswarn() */extern int errno, sys_nerr;extern char *sys_errlist[];void err(va_alist)va_dcl{ va_list args; char *format; if (EOF == fflush(stdout)) { fprintf(stderr, "\nerr: fflush failed on stdout"); } if (errno) syserr(va_alist); fprintf(stderr, "\n%s: ", xargv[0]); va_start(args); format = va_arg(args, char *); vfprintf(stderr, format, args); va_end(args); fprintf(stderr, "\n"); exit(EXIT_FAILURE);}void warn(va_alist)va_dcl{ va_list args; char *format; if (EOF == fflush(stdout)) { fprintf(stderr, "\nwarn: fflush failed on stdout"); } fprintf(stderr, "\n%s: ", xargv[0]); va_start(args); format = va_arg(args, char *); vfprintf(stderr, format, args); va_end(args); fprintf(stderr, "\n"); return;}void syserr(va_alist)va_dcl{ va_list args; char *format; if (EOF == fflush(stdout)) { err("syswarn: fflush failed on stdout"); } fprintf(stderr, "\n%s: ", xargv[0]); va_start(args); format = va_arg(args, char *); vfprintf(stderr, format, args); va_end(args); if (errno > 0 && errno < sys_nerr) { fprintf(stderr, " (%s)", sys_errlist[errno]); } fprintf(stderr, "\n"); exit(EXIT_FAILURE);}int syswarn(va_alist)va_dcl{ va_list args; char *format; if (EOF == fflush(stdout)) { err("syswarn: fflush failed on stdout"); } fprintf(stderr, "\n%s: ", xargv[0]); va_start(args); format = va_arg(args, char *); vfprintf(stderr, format, args); va_end(args); if (errno > 0 && errno < sys_nerr) { fprintf(stderr, " (%s)", sys_errlist[errno]); } fprintf(stderr, "\n"); return errno;}#ifdef TESTmain(int argc, char **argv){ int fd; float fmax, dt=0.004, nyq, x=1.0, y=0.0; initargs(argc, argv); nyq = 1.0/(2.0*dt); fmax = nyq/2.0 + .01; fprintf(stderr, "\nTrue values:\n"); fprintf(stderr, "fmax=%f, half nyquist=%f\n", fmax, 0.25/dt); fprintf(stderr, "filename=%s\n", xargv[1]); fprintf(stderr, "x=%f, y=%f\n\n", x, y); warn("warn: fmax = %f exceeds half nyquist= %f", fmax, 0.25/dt); if (-1 == (fd = open(xargv[1], O_RDONLY))) syswarn("syswarn: can't open %s", xargv[1]); err("err: Cannot divide %f by %f", x, y); return EXIT_SUCCESS;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -