Linux系統程式設計錯誤處理函式

2021-08-20 04:09:43 字數 4393 閱讀 1671

作為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,判斷對檔案是否有讀許可權 注 後三種可以...