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");
}
posted @ 2016-08-03 22:17  cfans1993  阅读(341)  评论(0编辑  收藏  举报