unix编程书中的 ourhdr.h代码
真心不知到里面写的具体什么意思,先记下吧。
/*Our own header, to be included after all standard system headers*/
#ifndef __ourhdr_h
#define __ourhdr_h #include <errno.h> /*for definition of errno */
#include <stdarg.h> /*ANSI C header file */
#include <sys/types.h> /* required for some of our prototypes */
#include <stdio.h> /* for convenience */
#include <stdlib.h> /* for convenience */
#include <string.h> /* for convenience */
#include <unistd.h> /* for convenience */ #define MAXLINE 4096 /* max line length */
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
/* default file access permissions for new files */
#define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
/* default permissions for new directoris */
typedef void Sigfunc(int); /* for signal handlers */
/* 4.3BSD Reno <signal.h> doesn't define
SIG_ERR */
#if defined(SIG_IGN) && !defined(SIG_ERR)
#define SIG_ERR ((Sigfunc *)-1)
#endif
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) > (b) ? (a) : (b))
/* prototypes for our own functions */
char *path_alloc(int *); /* {Prog pathalloc} */
int open_max(void); /* {Prog openmax} */
void clr_fl(int, int); /* {Prog setfl} */
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} */
int tty_cbreak(int); /* {Prog raw} */
int tty_raw(int); /* {Prog raw} */
int tty_reset(int); /* {Prog raw} */
void tty_atexit(void); /* {Prog raw} */ #ifdef ECHO /* only if <termios.h> has been included */
struct termios *tty_termios(void); /* {Prog raw} */
#endif
void sleep_us(unsigned int); /* {Ex sleepus} */
ssize_t readn(int, void *, size_t); /* {Prog readn} */
ssize_t writen(int, const void *, size_t); /* {Prog writen} */
int daemon_init(void); /* {Prog daemoninit} */
int s_pipe(int *); /* {Progs svr4_spipe bsd spipe} */
int recv_fd(int, ssize_t (*func)(int, const void *, size_t));
/* {Prog recvfd_svr4 recvfd_43bsd} */ int send_fd(int, int); /* {Progs sendfd_svr4 se
dfd_43bsd} */
int send_err(int, int, const char *);/* {Prog senderr} */
int serv_listen(const char *); /* {Progs servlisten_svr4 servli
ten_4
4bsd} */
int serv_accept(int, uid_t *); /* {Progs servaccept_svr4 servac
ept_4
4bsd} */
int cli_conn(const char *); /* {Progs cliconn_svr4 cliconn_4
bsd} */
int buf_args(char *, int (*func)(int, char **));
/* {Prog bufargs} */
int ptym_open(char *); /* {Progs ptyopen_svr4 p yopen_44bsd} */
int ptys_open(int, char *); /* {Progs ptyopen_svr4 ptyopen_4 bsd} */ #ifdef TIOCGWINSZ
pid_t pty_fork(int *, char *, const struct termios *,
const struct winsize *); /* {Prog ptyfork */
#endif
int lock_reg(int, int, int, off_t, int, off_t); /* {Prog lockreg} */ #define read_lock(fd, offset, whence, len) lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len)
#define readw_lock(fd, offset, whence, len) lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len)
#define write_lock(fd, offset, whence, len) lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len)
#define writew_lock(fd, offset, whence, len) lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len)
#define un_lock(fd, offset, whence, len) lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len)
pid_t lock_test(int, int, off_t, int, off_t); /* {Prog locktest} */
#define is_readlock(fd, offset, whence, len) lock_test(fd, F_RDLCK, offset, whence, len)
#define is_writelock(fd, offset, whence, len) lock_test(fd, F_WRLCK, offset, whence, len)
void err_dump(const char *, ...); /* {App misc_source} */
void err_msg(const char *, ...);
void err_quit(const char *, ...);
void err_ret(const char *, ...);
void err_sys(const char *, ...);
void log_msg(const char *, ...); /* {App misc_source} */
void log_open(const char *, int, int);
void log_quit(const char *, ...);
void log_ret(const char *, ...);
void log_sys(const char *, ...);
void TELL_WAIT(void); /* parent/child from {Sec race_condition } */
void TELL_PARENT(pid_t);
void TELL_CHILD(pid_t);
void WAIT_PARENT(void);
void WAIT_CHILD(void);
#endif /* __ourhdr_h */ static void err_doit(int, const char*, va_list);
char *pname = NULL; /* caller can set this from argv[0]*/
/* Nonfatal error realated to a system call . print a message and return . */
void err_ret(const char *fmt,...)
{
va_list ap;
va_start(ap, fmt);
err_doit(, fmt, ap);
va_end(ap); return;
} /* Fatal error related to a system call . print a message and terminate. */
void err_sys(const char *fmt,...)
{
va_list ap;
va_start(ap, fmt);
err_doit(, fmt, ap);
va_end(ap);
exit();
}
/* Fatal error related to a system call . print a message ,dump core ,and terminate. */
void err_dump(const char *fmt,...)
{
va_list ap; va_start(ap, fmt);
err_doit(, fmt, ap);
va_end(ap);
abort(); /* dump core and terminate */
exit(); /* shouldn't get here */
} /* Nofatal error related to a system call . print a message and return. */
void err_msg(const char *fmt,...)
{
va_list ap; va_start(ap, fmt);
err_doit(, fmt, ap);
va_end(ap); return;
}
/* Fatal error related to a system call . print a message and terminate. */
void err_quit(const char *fmt,...)
{
va_list ap;
va_start(ap, fmt);
err_doit(, fmt, ap);
va_end(ap);
exit();
}
/* print a message and return to caller. caller specifies "errnoflag". */
static void err_doit(int errnoflag, const char *fmt, va_list ap)
{
int errno_save;
char buf[MAXLINE]; errno_save = errno; /* value caller might want printed */
vsprintf(buf, fmt, ap); if (errnoflag)
sprintf(buf+strlen(buf),": %s", strerror(errno_save)); strcat(buf, "\n");
fflush(stdout); /* in case stdout and stderr are the same */
fputs(buf, stderr);
fflush(NULL); /*flushes and stdio output streams */ return;
}
unix编程书中的 ourhdr.h代码的更多相关文章
- 编程实践中C语言的一些常见细节
对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个环境获得,为简化起见, ...
- 03--(二)编程实践中C语言的一些常见细节
编程实践中C语言的一些常见细节(转载) 对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所 ...
- UNIX网络编程之旅-配置unp.h头文件环境
最近在学习Unix网络编程(UNP),书中steven在处理网络编程时只用了一个#include “unp.h” 相当有个性并且也很便捷 于是我把第三版的源代码编译实现了这个过程,算是一种个性化的开 ...
- 搞清楚ourhdr.h是什么及运行第一个UNIX C程序
好多人开始学:UNIX 环境高级编程这本书时:看到书里面说的头文件ourhdr.h而找不到她在哪里:而且无法开始继续学习:其实这个就是系统的内核标准头文件: 而她的位置在:/usr/include/u ...
- 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
各位程序猿: <剑指Offer>一书源自该书作者何海涛坚持更新与编写的博客(http://zhedahht.blog.163.com/),该博客收集整理了大量如微软.Goo ...
- unix ourhdr.h myerr.h
//在学UNIX环境高级编程时把下面两个头文件与源文件放在同一个文件下就可以正常编译了,我的是在ubuntu 12.04环境下,第一个程序编译和运行成功了,希望对大家有帮助(我已经根据网上的资料修改好 ...
- shell编程expr表达式----传智播客的书linux编程基础中出现的问题
首先声明:本人是传智播客的粉丝,拥有他出的多本编程书籍,此文绝无诋毁抹黑之意. 但在linux系统编程第88页给出的while循环范例中,代码运行无法得到预期结果 原代码如下 #!/bin/sh su ...
- [android]从书中编码方式,看编程思想
<Android权威编程指南第3版>今天学习到第10章,感叹经验丰富的编程理念——解耦合. 编程理念肯定是尽可能解除耦合,让代码可以复用,书中多次提到关于参数传递的解耦,这又出现一次. 本 ...
- 编程算法 - 数字在排序数组中出现的次数 代码(C)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/36869869 数字在排序数组中出现的次数 代 ...
随机推荐
- 理解Docker(2):Docker 镜像
本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
- css3 选择器(三)
接css3选择器(一) 接css3 选择器(二) 这篇和前两篇内容相关性不大,主要是涉及到一些css3的状态选择器,所以标题从一开始. 一.[:enabled]选择器 一看这个属性就知道是专为表单元素 ...
- cefsharp重写默认js弹窗(alert/confirm/prompt)
1.设置js弹窗控制器 webView.JsDialogHandler = this; //js弹窗控制 this表示本类对象,所以本类要实现IJsDialogHandler接口 2.实现IJsDi ...
- ASP.NET Core--根据方案来限制身份
翻译如下: 在某些情况下,比如单页的应用程序,可以与多种认证来方式结合.例如,您的应用程序可能使用基于Cookie的身份验证来登录和JavaScript的请求承载认证.在某些情况下,可能一个授权验证的 ...
- hyper容器网络相关源码分析
一.网络初始化 1.hyperd/daemon/daemon.go func NewDaemon(cfg *apitypes.HyperConfig) (*Daemon, error) .... 调用 ...
- JS中的“!!”
var o={flag:true}; var test=!!o.flag;//等效于var test=o.flag||false; alert(test); 由于对null与undefined用! ...
- IIS部署站点相关经验总结
IIS部署站点相关经验总结 1.IIS和.net4.0安装是有先后顺序的,应该先安装.net framework 4.0,再安装IIS.如果按相反顺序安装的话,IIS中看不到4.0相关的东西,那么只能 ...
- React业务实践
总结自:http://reactjs.cn/react/docs/thinking-in-react-zh-CN.html 当接到一个需求时,如何用react来实现? 以下几个步骤做参考. 第一步:把 ...
- Eclipse添加JPDL4 Schema校验
由于jbpm官方提供的图形化流程设计器(GPD)功能并不是特别的全面,很多设计并不能全在图形界面下完成.因此,在很多情况下,我们需要直接编辑JPDL的XML源代码,所以, 最好为JPDL XML指定S ...
- IDEA 分享项目到 Git@OSC/GitHub
前提:新开项目,需要在 Git@OSC 建立版本库管理. 1.当然是先在Git@OSC上创建仓库,拿到Git@OSC仓库的HTTP连接 https://git.oschina.net/*****/** ...