怎么编译apue的程序
来源:互联网 发布:电脑加密软件下载 编辑:程序博客网 时间:2024/05/16 16:23
开始好多方法就是配置自己的环境,然而对一个对unix刚刚入门的学生来说有点小麻烦,当然我们必须要掌握的,然后我就把相关的头文件和错误处理的函数包含在一个文件里面
每个程序前面加上 #include “head.h” (文件名字为head.h)就ok了
/* * Our own header, to be included before all standard system headers. */#ifndef_APUE_H#define_APUE_H#define _POSIX_C_SOURCE 200809L#if defined(SOLARIS)/* Solaris 10 */#define _XOPEN_SOURCE 600#else#define _XOPEN_SOURCE 700#endif#include <sys/types.h>/* some systems still require this */#include <sys/stat.h>#include <sys/termios.h>/* for winsize */#if defined(MACOS) || !defined(TIOCGWINSZ)#include <sys/ioctl.h>#endif#include <stdio.h>/* for convenience */#include <stdlib.h>/* for convenience */#include <stddef.h>/* for offsetof */#include <string.h>/* for convenience */#include <unistd.h>/* for convenience */#include <signal.h>/* for SIG_ERR */#defineMAXLINE4096/* max line length *//* * Default file access permissions for new files. */#defineFILE_MODE(S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)/* * Default permissions for new directories. */#defineDIR_MODE(FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)typedefvoidSigfunc(int);/* for signal handlers */#definemin(a,b)((a) < (b) ? (a) : (b))#definemax(a,b)((a) > (b) ? (a) : (b))/* * Prototypes for our own functions. */char*path_alloc(size_t *);/* {Prog pathalloc} */long open_max(void);/* {Prog openmax} */int set_cloexec(int);/* {Prog setfd} */void clr_fl(int, int);void set_fl(int, int);/* {Prog setfl} */void pr_exit(int);/* {Prog prexit} */void pr_mask(const char *);/* {Prog prmask} */Sigfunc*signal_intr(int, Sigfunc *);/* {Prog signal_intr_function} */void daemonize(const char *);/* {Prog daemoninit} */void sleep_us(unsigned int);/* {Ex sleepus} */ssize_t readn(int, void *, size_t);/* {Prog readn_writen} */ssize_t writen(int, const void *, size_t);/* {Prog readn_writen} */int fd_pipe(int *);/* {Prog sock_fdpipe} */int recv_fd(int, ssize_t (*func)(int, const void *, size_t));/* {Prog recvfd_sockets} */int send_fd(int, int);/* {Prog sendfd_sockets} */int send_err(int, int, const char *);/* {Prog senderr} */int serv_listen(const char *);/* {Prog servlisten_sockets} */int serv_accept(int, uid_t *);/* {Prog servaccept_sockets} */int cli_conn(const char *);/* {Prog cliconn_sockets} */int buf_args(char *, int (*func)(int, char **));/* {Prog bufargs} */int tty_cbreak(int);/* {Prog raw} */int tty_raw(int);/* {Prog raw} */int tty_reset(int);/* {Prog raw} */void tty_atexit(void);/* {Prog raw} */struct termios*tty_termios(void);/* {Prog raw} */int ptym_open(char *, int);/* {Prog ptyopen} */int ptys_open(char *);/* {Prog ptyopen} */#ifdefTIOCGWINSZpid_t pty_fork(int *, char *, int, const struct termios *, const struct winsize *);/* {Prog ptyfork} */#endifintlock_reg(int, int, int, off_t, int, off_t); /* {Prog lockreg} */#defineread_lock(fd, offset, whence, len) \lock_reg((fd), F_SETLK, F_RDLCK, (offset), (whence), (len))#definereadw_lock(fd, offset, whence, len) \lock_reg((fd), F_SETLKW, F_RDLCK, (offset), (whence), (len))#definewrite_lock(fd, offset, whence, len) \lock_reg((fd), F_SETLK, F_WRLCK, (offset), (whence), (len))#definewritew_lock(fd, offset, whence, len) \lock_reg((fd), F_SETLKW, F_WRLCK, (offset), (whence), (len))#defineun_lock(fd, offset, whence, len) \lock_reg((fd), F_SETLK, F_UNLCK, (offset), (whence), (len))pid_tlock_test(int, int, off_t, int, off_t);/* {Prog locktest} */#defineis_read_lockable(fd, offset, whence, len) \(lock_test((fd), F_RDLCK, (offset), (whence), (len)) == 0)#defineis_write_lockable(fd, offset, whence, len) \(lock_test((fd), F_WRLCK, (offset), (whence), (len)) == 0)voiderr_msg(const char *, ...);/* {App misc_source} */voiderr_dump(const char *, ...) __attribute__((noreturn));voiderr_quit(const char *, ...) __attribute__((noreturn));voiderr_cont(int, const char *, ...);voiderr_exit(int, const char *, ...) __attribute__((noreturn));voiderr_ret(const char *, ...);voiderr_sys(const char *, ...) __attribute__((noreturn));voidlog_msg(const char *, ...);/* {App misc_source} */voidlog_open(const char *, int, int);voidlog_quit(const char *, ...) __attribute__((noreturn));voidlog_ret(const char *, ...);voidlog_sys(const char *, ...) __attribute__((noreturn));voidlog_exit(int, const char *, ...) __attribute__((noreturn));voidTELL_WAIT(void);/* parent/child from {Sec race_conditions} */voidTELL_PARENT(pid_t);voidTELL_CHILD(pid_t);voidWAIT_PARENT(void);voidWAIT_CHILD(void);#endif/* _APUE_H */#include <errno.h> /* for definition of errno */#include <stdarg.h> /* ISO C variable aruments */static void err_doit(int, int, const char *, va_list);/* err_ret非致命错误输出 与err_sys相比,没有exit(),并不退出函数。 相同的是都调用stderror(errno)打印详细出错信息。 可变参数列表中多为vsnprintf等打印参数的参数列表。 */voiderr_ret(const char *fmt, ...){ va_list ap; va_start(ap, fmt); err_doit(1, errno, fmt, ap); va_end(ap);}/* * Fatal error related to a system call. * Print a message and terminate. */voiderr_sys(const char *fmt, ...){ va_list ap; va_start(ap, fmt); err_doit(1, errno, fmt, ap); va_end(ap); exit(1); /* 退出 */}/* * Fatal error unrelated to a system call. * Error code passed as explict parameter. * Print a message and terminate. * 不调用系统打印出错信息。 */voiderr_exit(int error, const char *fmt, ...){ va_list ap; va_start(ap, fmt); err_doit(1, error, fmt, ap); va_end(ap); exit(1);}/* * 不调用系统出错信息,但退出程序 * Fatal error related to a system call. * Print a message, dump core, and terminate. */voiderr_dump(const char *fmt, ...){ va_list ap; va_start(ap, fmt); err_doit(1, errno, fmt, ap); va_end(ap); abort(); /* dump core and terminate */ exit(1); /* shouldn't get here */}/* * Nonfatal error unrelated to a system call. * Print a message and return. */voiderr_msg(const char *fmt, ...){ va_list ap; va_start(ap, fmt); err_doit(0, 0, fmt, ap); va_end(ap);}/* * 不调用系统出错信息,但退出程序 * Print a message and terminate. */voiderr_quit(const char *fmt, ...){ va_list ap; va_start(ap, fmt); err_doit(0, 0, fmt, ap); va_end(ap); exit(1);}/* * Print a message and return to caller. * Caller specifies "errnoflag". */static voiderr_doit(int errnoflag, int error, const char *fmt, va_list ap){ char buf[MAXLINE]; vsnprintf(buf, MAXLINE, fmt, ap); /* vsnprintf与snprintf区别在于vsnprintf调用可变参数列表 */ if (errnoflag) /* 在buf后追加系统出错信息 */ 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); /* flushes all stdio output streams */}
- 怎么编译apue的程序
- apue编译单个程序的方法
- APUE代码的编译
- apue中源代码的编译
- VS2012怎么编译出xp的程序
- 怎么看单片机编译的程序大小?
- apue编译
- 编译APUE
- apue编译
- 在Linux下编译APUE的例子
- 记录关于APUE的编译方法
- apue源代码的使用与编译
- apue源代码的使用与编译
- apue源代码的使用与编译
- apue源代码的使用与编译
- apue源代码的使用与编译
- 编译和使用APUE的源码
- apue源码的编译与使用
- java用补码表示负数
- Tomcat Server.xml详解
- NYOJ 788 又见Alice and Bob
- PHP-图形图像-GD2-配置
- 保时捷917/7代911实拍回顾
- 怎么编译apue的程序
- 线程的生命周期
- hdu4770Lights Against Dudely
- 13个mysql数据库的实用SQL小技巧
- A.Soroban
- (关联容器)set 和 multiset
- 远程桌面连接数超过最大限制解决方法
- ORACLE varchar2 长度问题整体
- Oracle通过myebatis批量添加数据