zoukankan      html  css  js  c++  java
  • 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,"
    ",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");
    }
    
  • 相关阅读:
    springboot小技巧(转)
    spring boot项目如何测试,如何部署
    thymeleaf模板的使用(转)
    springboot+多数据源配置
    springboot+shiro
    springboot+jpa+thymeleaf增删改查的示例(转)
    SpringBoot ( 七 ) :springboot + mybatis 多数据源最简解决方案
    tcpdump查看某个端口数据
    oracle完全删除表空间
    检测python进程是否存活
  • 原文地址:https://www.cnblogs.com/cfans1993/p/5734785.html
Copyright © 2011-2022 走看看