unpipc.h&unpipc.c

unpipc.h

#ifndef _UNPIPC_H
#define _UNPIPC_H #include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <limits.h>
#include <stdarg.h>
#include <signal.h> #define MAXLINE 1024
//定义一个新类型Sigfunc,该类型的变量是一个带有一个int型参数,没有返回值的函数
typedef void Sigfunc(int); void err_quit(char *fmt,...);
void Write(int fd,void *buf,size_t nbytes);
ssize_t Read(int fd,void *buf,size_t nbytes);
int Open(const char *pathname,int flags,mode_t mode);
void Close(int fd);
void Unlink(const char *pathname);
void Fputs(const char *buf,FILE *fp);
char *Fgets(char *buf,int nbytes, FILE *fp); pid_t Fork(void); Sigfunc *Signal(int signo,Sigfunc *);
void Sigemptyset(sigset_t *set);
void Sigaddset(sigset_t *set,int signo);
void Sigprocmask(int command,sigset_t *set,sigset_t *oset);
void Sigwait(const sigset_t *set,int *signo); void *Malloc(size_t size); #endif

unpipc.c

#include "unpipc.h"

void err_quit(char *fmt,...){
int errno_save=errno;
va_list va;
va_start(va,fmt);
vfprintf(stderr,fmt,va);
if(errno_save != 0)
fprintf(stderr," :%s",strerror(errno_save));
fprintf(stderr,"\n",va);
va_end(va);
exit(0);
}
void Write(int fd,void *buf,size_t nbytes){
if(write(fd,buf,nbytes) != nbytes)
err_quit("write error");
}
ssize_t Read(int fd,void *buf,size_t nbytes){
size_t nread=read(fd,buf,nbytes);
if(-1 == nread)
err_quit("read error");
return nread;
}
int Open(const char *pathname,int flags,mode_t mode){
int fd=open(pathname,flags,mode);
if(-1 == fd)
err_quit("open error");
return fd;
}
void Close(int fd){
if(close(fd) == -1)
err_quit("close error");
}
void Unlink(const char *pathname){
if(unlink(pathname) == -1)
err_quit("unlink error");
}
pid_t Fork(void){
pid_t pid;
if((pid=fork())<0)
err_quit("fork error");
return pid;
}
void Fputs(const char *buf, FILE *fp){
if(fputs(buf,fp) == EOF)
err_quit("fputs error");
}
char *Fgets(char *buf,int nbytes,FILE *fp){
char *ptr=fgets(buf,nbytes,fp);
if((ptr==NULL) && (ferror(fp)))
err_quit("fgets error");
return ptr;
}
Sigfunc *Signal(int signo,Sigfunc *func){
Sigfunc *sigfunc=signal(signo,func);
if(SIG_ERR == sigfunc)
err_quit("signal error");
return(sigfunc);
}
void *Malloc(size_t size){
void *ptr=malloc(size);
if(NULL == ptr)
err_quit("malloc error");
return(ptr);
}
void Sigemptyset(sigset_t *set){
if(sigemptyset(set) == -1)
err_quit("sigemptyset error");
}
void Sigaddset(sigset_t *set,int signo){
if(sigaddset(set,signo) == -1)
err_quit("sigaddset error");
}
void Sigprocmask(int command,sigset_t *set,sigset_t *oset){
if(sigprocmask(command,set,oset) == -1)
err_quit("sigprocmask error");
}
void Sigwait(const sigset_t *set,int *signo){
if(sigwait(set,signo) != 0)
err_quit("sigwait error");
}
上一篇:云原生安全之利用Deployment来部署后门


下一篇:exchange邮件系统日志查看及管理