//在学UNIX环境高级编程时把下面两个头文件与源文件放在同一个文件下就可以正常编译了,我的是在ubuntu 12.04环境下,第一个程序编译和运行成功了,希望对大家有帮助(我已经根据网上的资料修改好两个头文件)

/* Our own header, to be included *after* all standard system headers */
//ourhdr.h

#ifndef__ourhdr_h
#define__ourhdr_h

#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 */

#defineMAXLINE4096/* max line length */

#defineFILE_MODE(S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
/* default file access permissions for new files */
#defineDIR_MODE(FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
/* default permissions for new directories */

typedefvoid Sigfunc(int);/* for signal handlers */

/* 4.3BSD Reno <signal.h> doesn't define SIG_ERR */
#ifdefined(SIG_IGN) && !defined(SIG_ERR)
#defineSIG_ERR((Sigfunc *)-1)
#endif

#definemin(a,b)((a) < (b) ? (a) : (b))
#definemax(a,b)((a) > (b) ? (a) : (b))

/* prototypes for our own functions */
char*path_alloc(int *);/* {Prog pathalloc} */
intopen_max(void);/* {Prog openmax} */
voidclr_fl(int, int);/* {Prog setfl} */
voidset_fl(int, int);/* {Prog setfl} */
voidpr_exit(int);/* {Prog prexit} */
voidpr_mask(const char *);/* {Prog prmask} */
Sigfunc*signal_intr(int, Sigfunc *);/* {Prog signal_intr_function} */

inttty_cbreak(int);/* {Prog raw} */
inttty_raw(int);/* {Prog raw} */
inttty_reset(int);/* {Prog raw} */
voidtty_atexit(void);/* {Prog raw} */
#ifdefECHO /* only if <termios.h> has been included */
struct termios*tty_termios(void);/* {Prog raw} */
#endif

voidsleep_us(unsigned int);/* {Ex sleepus} */
ssize_treadn(int, void *, size_t);/* {Prog readn} */
ssize_twriten(int, const void *, size_t);/* {Prog writen} */
intdaemon_init(void);/* {Prog daemoninit} */

ints_pipe(int *);/* {Progs svr4_spipe bsd_spipe} */
intrecv_fd(int, ssize_t (*func)(int, const void *, size_t));
/* {Progs recvfd_svr4 recvfd_43bsd} */
intsend_fd(int, int);/* {Progs sendfd_svr4 sendfd_43bsd} */
intsend_err(int, int, const char *);/* {Prog senderr} */
intserv_listen(const char *);/* {Progs servlisten_svr4 servlisten_44bsd} */
intserv_accept(int, uid_t *);/* {Progs servaccept_svr4 servaccept_44bsd} */
intcli_conn(const char *);/* {Progs cliconn_svr4 cliconn_44bsd} */
intbuf_args(char *, int (*func)(int, char **));
/* {Prog bufargs} */

intptym_open(char *);/* {Progs ptyopen_svr4 ptyopen_44bsd} */
intptys_open(int, char *);/* {Progs ptyopen_svr4 ptyopen_44bsd} */
#ifdefTIOCGWINSZ
pid_tpty_fork(int *, char *, const struct termios *,
 const struct winsize *);/* {Prog ptyfork} */
#endif

intlock_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_readlock(fd, offset, whence, len) \
lock_test(fd, F_RDLCK, offset, whence, len)
#defineis_writelock(fd, offset, whence, len) \
lock_test(fd, F_WRLCK, offset, whence, len)

voiderr_dump(const char *, ...);/* {App misc_source} */
voiderr_msg(const char *, ...);
voiderr_quit(const char *, ...);
voiderr_ret(const char *, ...);
voiderr_sys(const char *, ...);

voidlog_msg(const char *, ...);/* {App misc_source} */
voidlog_open(const char *, int, int);
voidlog_quit(const char *, ...);
voidlog_ret(const char *, ...);
voidlog_sys(const char *, ...);

voidTELL_WAIT(void);/* parent/child from {Sec race_conditions} */
voidTELL_PARENT(pid_t);
voidTELL_CHILD(pid_t);
voidWAIT_PARENT(void);
voidWAIT_CHILD(void);

#endif/* __ourhdr_h */

//myerr.h

#include "ourhdr.h"
#include <errno.h>/* for definition of errno */
#include <stdarg.h>/* ISO C variable aruments */

static voiderr_doit(int, int, const char *, va_list);

/*
 * Nonfatal error related to a system call.
 * Print a message and return.
 */
void
err_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.
 */
void
err_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.
 */
void
err_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.
 */
void
err_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.
 */
void
err_msg(const char *fmt, ...)
{
va_list ap;

va_start(ap, fmt);
err_doit(0, 0, fmt, ap);
va_end(ap);
}

/*
 * Fatal error unrelated to a system call.
 * Print a message and terminate.
 */
void
err_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 void
err_doit(int errnoflag, int error, const char *fmt, va_list ap)
{
charbuf[MAXLINE];

vsnprintf(buf, MAXLINE, fmt, ap);
if (errnoflag)
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 */
}

unix ourhdr.h myerr.h的更多相关文章

  1. sys/types.h fcntl.h unistd.h sys/stat.h

    sys/types.h 是Unix/Linux系统的基本系统数据类型的头文件,含有size_t,time_t,pid_t等类型. 在应用程序源文件中包含 <sys/types.h> 以访问 ...

  2. Sed命令n,N,d,D,p,P,h,H,g,G,x解析3

    摘自:https://blog.csdn.net/WMSOK/article/details/78463199 Sed命令n,N,d,D,p,P,h,H,g,G,x解析 2017年11月06日 23: ...

  3. sed命令n,N,d,D,p,P,h,H,g,G,x解析2

    摘自: https://blog.csdn.net/xiexingshishu/article/details/50514132 sed命令n,N,d,D,p,P,h,H,g,G,x解析 2016年0 ...

  4. oc 与 swift 之间的桥接文件 (ProjectNmae-Bridging-Header.h) (ProjectNmae-Swift.h)

    oc 与 Swift 是2种不同的语言, oc代码只能写带oc文件里, Swift代码只能写在Swift文件里, 虽然2者不同语言, 但却能互相调用, 不过需要进行一下桥接, 就是下面的2个文件 (P ...

  5. jpeglib.h jerror.h No such file or directory 以及 SDL/SDL.h: 没有那个文件

    1. error: jpeglib.h jerror.h No such file or directory 没有那个文件或目录 jpeg.cc:19:21:error: jpeglib.h: 没有那 ...

  6. H.265 & H.264

    H.265 & H.264 HEVC (H.265) vs. AVC (H.264) https://en.wikipedia.org/wiki/High_Efficiency_Video_C ...

  7. stdlib.h stdio.h

    stdlib.h 即standard library标准库头文件.stdlib.h里面定义了五种类型.一些宏和通用工具函数. 类型例如size_t.wchar_t.div_t.ldiv_t和lldiv ...

  8. pod JONSKit.h MBProgress.h 找不到头文件,怎么办?

    这时你看项目pod部分,多了JSONKit库.好了,第三方库就这么神奇的加进来. 头文件路径 那试试看使用JONSKit.h,在ViewController.m里引用下.找不到头文件,怎么办?还没设置 ...

  9. 走进C标准库(1)——assert.h,ctype.h

    默默觉得原来的阅读笔记的名字太土了,改了个名字,叫做走进C标准库. 自己就是菜鸟一只,第一次具体看C标准库,文章参杂了对<the standard C library>的阅读和对源码的一些 ...

随机推荐

  1. Windows(64位IIS)未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

    在Windows 7(32位)用.Net开发的Excel导入数据表功能,测试后一切正常,站点发布挪到Windows Server 2008(64位)上就意外了,出现错误提示,运行程序,抛出异常:未在本 ...

  2. ZOJ 2852 Deck of Cards DP

    题意: 一一个21点游戏. 1. 有三个牌堆,分别为1X,2X,3X. 2. 纸牌A的值为1,纸牌2-9的值与牌面面相同,10(T).J.Q.K的值为10,而而joke(F)的值为 任意大大. 3. ...

  3. (Problem 9)Special Pythagorean triplet

    A Pythagorean triplet is a set of three natural numbers, a  b  c, for which, a2 + b2 = c2 For exampl ...

  4. 开发板ip设置

    vi /etc/init.d/rcS 在其中加入 ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up 就可以了

  5. 利用Tomcat的用户名和密码构建“永久”后门

    从本案例中可以学到: (1)关于JSP的一些基础知识 (2)利用Tomcat的用户名和密码来构建后门 本文首先要感谢<黑客手册>“非安全.后生”编辑为本为提供了帮助,还要感谢网友“伤心的鱼 ...

  6. Qt 操作 pdf 文件

    写了好久的东西,不小心按了下返回键就没了.CSDN居然没自动保存,坑爹啊 原本还有很多信息的,现在直入正题吧. QT没有内置PDF操作的功能(其实有一个,QPrinter,不过只能写不能读,基本是半残 ...

  7. zookeeper perl 版本需求

    [root@wx03 ~]# perl -v This is perl 5, version 22, subversion 1 (v5.22.1) built for x86_64-linux Cop ...

  8. csharp .net vb 复制图像

    .NET Compact Framework 不支持 Image.Clone 方法,可是仍能够复制图像和图像的某些部分.以下的演示例子演示怎样运行以下操作: 定义一个方法以创建位图. 定义一个重载方法 ...

  9. Android灭亡论之Firefox OS操作系统出现

    今天是2014年7月1日,过几天就要到深圳实训去了,实训核心内容是Android开发.尽管Android现在很火,但作为程序猿的我们必须时刻保持清醒的头脑.我虽不是什么预言家,但近期接触的Androi ...

  10. 高级UIKit-10(UDPSocket)

    [day1201_UDPSocket]:utpsocket的使用 使用UDP网络传输,是一种无连接的传输协议,不安全,一般使用在监控视频中或QQ聊天中,该网络传输就向广播传播模式,一对多. 在ios中 ...