作為linux的菜鳥,最近在看《linux/uinx系統程式設計手冊》,不得不說這是本很好很好的書。今天整理了一下在本書上冊開始部分給出的錯誤處理函式如下,希望對大家有所幫助:
//tlpi_hdr.h
#ifndef tpli_hdr_h
#define tpli_hdr_h /*prevent accidental double inclusion*/
#include
/*type definitionos used by many programs*/
#include
/*standard i/o function*/
#include
/**prototypes of commonly used library functions, plus exit_success and exit_failure constants*/
#include
/*prototypes for many system calls*/
#include
/*declares errno and defines error constants*/
#include
<
string
.h>
/*commonly used string-handing functions*/
#include
"get_num.h"
/*declares our functions for handing numeric arguments (getint(), getlong())*/
#include
"error_functions.h"
/*declars our error-handing functions*/
typedef enum boolean;
#define
min(m, n) ((m) < (n) ? (m) : (n))
#define
max(m, n) ((m) > (n) ? (m) : (n))
#endif
//error_functions.h
#ifndef error_functions
#define error_functions
void errmsg(const char *format, ...);
#ifdef _gnuc_
#define noreturn _attribute_ ((_noreturn))
#else
#define noreturn
#endif
void errexit(const char *format, ...) noreturn;
void err_exit(const char *format, ...) noreturn;
void errexiten(int errnum, const char *format, ...) noreturn;
void fatal(const char *format, ...) noreturn;
void usageerr(const char *format, ...) noreturn;
void cmdlineerr(const char *format, ...) noreturn;
#endif
//error_functions.c
#include
#include "error_functions.h"
#include "tlpi_hdr.h"
#include "ename.c.inc"
#ifdef _gnuc_
_attribute_((_noreturn_))
#endif
static void
terminate(boolean useexit3)
else
if (useexit3)
else
}static void
outputerror(boolean useerr, int err, boolean flushstdout,
const char *format, va_list ap)
else
snprintf(buf, buf_size, "error%s %s\n", errtext, usermsg);
if (flushstdout)
fputs(buf, stderr);
fflush(stderr);
}void errmsg(const char*format, ...)
void
errexit(const char *format, ...)
void
err_exit(const char *format, ...)
void
errexiten(int errnum, const char *format, ...)
void
fatal(const char *format, ...)
void
usageerr(const char *format, ...)
void
cmdlineerr(const char *format, ...)
//get_num.h
#ifndef get_num_h
#define get_num_h
#define gn_nonneg 01 /*value mustmust be > 0*/
#define gn_gt_0 02 /*value*/
#define gn_any_base 0100 /*by default, integers are decimal*/
#define gn_base_8 0200 /*can use any base - like strtol(3)*/
#define gn_base_16 0400 /*value is expressed in octal*/
long getlong(const
char *arg, int flags, const
char *name);
int getint(const
char *arg, int flags, const
char *name);
#endif
//get_num.c
#include
#include
#include
#include
#include
#include "get_num.h"
static
void
gnfail(const
char *fname, const
char *msg, const
char *arg, const
char *name)
fprintf(stderr, ": %s\n", msg);
if (arg != null && *arg != '\0')
exit(exit_failure);
}static
long
getnum(const
char *fname, const
char *arg, int flags, const
char *name)
base = (flags & gn_any_base) ? 0 : (flags & gn_base_8) ? 8:
(flags & gn_base_16) ? 16 : 10;
errno = 0;
res = strtol(arg, &endptr, base);
if (errno != 0)
if (*endptr != '\0')
if (flags & gn_nonneg && res < 0)
if ((flags & gn_gt_0) && res <= 0)
return res;
}long
getlong(const
char *arg, int flags, const
char *name)
int
getint(const
char *arg, int flags, const
char *name)
return (int)res;
}
static
char *ename = ;
#define max_ename 132
系統呼叫 錯誤處理函式
1 perror perror函式是用來列印錯誤提示資訊的,原型是 include void perror const char s 它先列印s指向的字串,然後輸出當前errno值所對應的錯誤提示資訊,例如當前errno若為12,呼叫perror abc 會輸出 abc cannot allocat...
Linux系統程式設計中小函式
srand 產生偽隨機數種子,如果沒有指定偽隨機數種子,rand使用偽隨機數為1的種子。rand 產生 0 rand max 之間的隨機數 include define rand max 2147483647 void srand unsigned int seed int rand void 1....
Linux系統程式設計 access函式
include intaccess const char pathname,int mode 引數一 路徑名 引數二 f ok 值為0,判斷檔案是否存在 x ok 值為1,判斷對檔案是可執行許可權 w ok 值為2,判斷對檔案是否有寫許可權 r ok 值為4,判斷對檔案是否有讀許可權 注 後三種可以...