UNIX/Linux系统调用_常用头文件

#ifndef _APUE_H
#define _APUE_H

#define _XOPEN_SOURCE 600 /* Single UNIX Speciation v3*/
#include<sys/types.h>  /*some systems still require this*/
#include<sys/stat.h>
#include<sys/termios.h> /*for winsize*/
#ifndef TIOCGWINSZ
#include <sys/ioctl.h>
#endif
#include<stdio.h>
#include<stdlib.h>
#include<stddef.h>  /*for offsetof*/
#include<string.h>
#include<unistd.h>
#include<signal.h> /*for SIG_ERR*/

#define MAXLINE 4096

/* defalut file access permission for new file*/
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | IROHR)

/** Default permission for new directiories*/
#define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)

typedef void Sigfunc(int);  /*for single handlers*/
#if defined(SIG_IGN) && ! defined(SIG_ERR)
#define  SIG_ERR ((Sigfunc *)-1)
#endif

#define min(a,b)  ((a)<(b)?(a):(b))
#define max(a,b)  ((a)>(b)?(a):(b))

/*两套出错处理函数:以log_ 和 err_*/
void err_dump(const char*, ...);
void err_msg(const char*, ...);
void err_quit(const char*, ...);
void err_exit(const char*, ...);
void err_ret(const char*, ...);
void err_ret(const char*, ...);
void err_sys(const char*, ...);

void log_msg(const char*,...);
void log_open(const char*,int,int);
void log_quit(const char*,...);
void log_ret(const char*,...);
void log_sys(const char*,...);
#endif /*apue.h*/
-----------------------------------------------------------------------------------------------------------------

#include "apue.h"
#include<errno.h>  /*for definition  of errno*/
#include<stdarg.h>  /*ISO C  variable  aruments,it define "va_list"*/

/*Nonfatal error related to system call,print a message and return*/
/*caller specifies "errorflag"*/
static void err_doit(int,int,const char *,va_list);

void err_quit(const char * fmt,...)
{
 va_list ap;
 va_start(ap,fmt);
 err_doit(0,0,fmt,ap);
 va_end(ap);
 exit(0);
};

/*fatal error related to system call*/
/*print a message and return*/
void err_sys(const char * fmt,...)
{
 va_list ap;
 va_start(ap,fmt);
 err_doit(0,errno,fmt,ap);
 va_end(ap);
 exit(0);
};


static void err_doit(int errnoflag,int error ,const char * fmt,va_list ap)
{
 char  buf[MAXLINE];
 vsnprintf(buf,MAXLINE,fmt,ap);
 if(!errnoflag)
  {
   snprintf(buf+strlen(buf),MAXLINE - strlen(buf),": %s",strerror(error));
  }
 strcat(buf,"\n");
 fflush(stdout);  /*in case stdout and stderr are the same*/
 fputs(buf,stderr);
 fflush(NULL); /*flush all stdio output  streams*/
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值