⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wrapunix.c

📁 Unix网络编程 基于Socket的网络编程
💻 C
字号:
/* * Socket wrapper functions. * These could all go into separate files, so only the ones needed cause * the corresponding function to be added to the executable.  If sockets * are a library (SVR4) this might make a difference (?), but if sockets * are in the kernel (BSD) it doesn't matter. * * These wrapper functions also use the same prototypes as POSIX.1g, * which might differ from many implementations (i.e., POSIX.1g specifies * the fourth argument to getsockopt() as "void *", not "char *"). * * If your system's headers are not correct [i.e., the Solaris 2.5 * <sys/socket.h> omits the "const" from the second argument to both * bind() and connect()], you'll get warnings of the form: *warning: passing arg 2 of `bind' discards `const' from pointer target type *warning: passing arg 2 of `connect' discards `const' from pointer target type */#include	"unp.h"void *Calloc(size_t n, size_t size){	void	*ptr;	if ( (ptr = calloc(n, size)) == NULL)		err_sys("calloc error");	return(ptr);}voidClose(int fd){	if (close(fd) == -1)		err_sys("close error");}voidDup2(int fd1, int fd2){	if (dup2(fd1, fd2) == -1)		err_sys("dup2 error");}intFcntl(int fd, int cmd, int arg){	int	n;	if ( (n = fcntl(fd, cmd, arg)) == -1)		err_sys("fcntl error");	return(n);}voidGettimeofday(struct timeval *tv, void *foo){	if (gettimeofday(tv, foo) == -1)		err_sys("gettimeofday error");	return;}intIoctl(int fd, int request, void *arg){	int		n;	if ( (n = ioctl(fd, request, arg)) == -1)		err_sys("ioctl error");	return(n);	/* streamio of I_LIST returns value */}pid_tFork(void){	pid_t	pid;	if ( (pid = fork()) == -1)		err_sys("fork error");	return(pid);}void *Malloc(size_t size){	void	*ptr;	if ( (ptr = malloc(size)) == NULL)		err_sys("malloc error");	return(ptr);}voidMktemp(char *template){	if (mktemp(template) == NULL || template[0] == 0)		err_quit("mktemp error");}#include	<sys/mman.h>void *Mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset){	void	*ptr;	if ( (ptr = mmap(addr, len, prot, flags, fd, offset)) == ((void *) -1))		err_sys("mmap error");	return(ptr);}intOpen(const char *pathname, int oflag, mode_t mode){	int		fd;	if ( (fd = open(pathname, oflag, mode)) == -1)		err_sys("open error for %s", pathname);	return(fd);}voidPipe(int *fds){	if (pipe(fds) < 0)		err_sys("pipe error");}ssize_tRead(int fd, void *ptr, size_t nbytes){	ssize_t		n;	if ( (n = read(fd, ptr, nbytes)) == -1)		err_sys("read error");	return(n);}voidSigaddset(sigset_t *set, int signo){	if (sigaddset(set, signo) == -1)		err_sys("sigaddset error");}voidSigdelset(sigset_t *set, int signo){	if (sigdelset(set, signo) == -1)		err_sys("sigdelset error");}voidSigemptyset(sigset_t *set){	if (sigemptyset(set) == -1)		err_sys("sigemptyset error");}voidSigfillset(sigset_t *set){	if (sigfillset(set) == -1)		err_sys("sigfillset error");}intSigismember(const sigset_t *set, int signo){	int		n;	if ( (n = sigismember(set, signo)) == -1)		err_sys("sigismember error");	return(n);}voidSigpending(sigset_t *set){	if (sigpending(set) == -1)		err_sys("sigpending error");}voidSigprocmask(int how, const sigset_t *set, sigset_t *oset){	if (sigprocmask(how, set, oset) == -1)		err_sys("sigprocmask error");}char *Strdup(const char *str){	char	*ptr;	if ( (ptr = strdup(str)) == NULL)		err_sys("strdup error");	return(ptr);}longSysconf(int name){	long	val;	errno = 0;		/* in case sysconf() does not change this */	if ( (val = sysconf(name)) == -1)		err_sys("sysconf error");	return(val);}#ifdef	HAVE_SYS_SYSCTL_HvoidSysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp,	   void *newp, size_t newlen){	if (sysctl(name, namelen, oldp, oldlenp, newp, newlen) == -1)		err_sys("sysctl error");}#endifvoidUnlink(const char *pathname){	if (unlink(pathname) == -1)		err_sys("unlink error for %s", pathname);}pid_tWait(int *iptr){	pid_t	pid;	if ( (pid = wait(iptr)) == -1)		err_sys("wait error");	return(pid);}pid_tWaitpid(pid_t pid, int *iptr, int options){	pid_t	retpid;	if ( (retpid = waitpid(pid, iptr, options)) == -1)		err_sys("waitpid error");	return(retpid);}voidWrite(int fd, void *ptr, size_t nbytes){	if (write(fd, ptr, nbytes) != nbytes)		err_sys("write error");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -