关于UNIX/Linux下安装《UNIX环境高级编程》源代码的问题

《UNIX环境高级编程(第三版)》是一本广为人知的unix系统编程书籍。

但是,书中的代码示例,要想正确的编译运行,要先做好准备工作:

1.下载源代码

传送门:http://apuebook.com/code3e.html

2.解压源代码

tar xf  src.3e.tar.gz

3.安装libbsd-devel,不然编译的时候回报错

yum install libbsd-devel -y

4.编译

cd apue.3e/
make
cp ./include/apue.h /usr/include/
cp ./lib/libapue.a /usr/local/lib/
cp ./lib/libapue.a /usr/lib/

5.自定义错误头文件

vim /usr/include/myerr.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);

/*
 * 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)
{
    char buf[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 */
}

测试

写个程序

vim myls.c

#include "apue.h"
#include "myerr.h"
#include <dirent.h>
int
main(int argc, char *argv[])
{
    DIR *dp;
    struct dirent *dirp;
    if (argc != 2)
        err_quit("usage: ls directory_name");
    if ((dp = opendir(argv[1])) == NULL)
        err_sys("can’t open %s", argv[1]);
    while ((dirp = readdir(dp)) != NULL)
        printf("%s\n", dirp->d_name);
    closedir(dp);
    exit(0);
}

编译

gcc myls.c 

执行

./a.out /root
时间: 2024-09-29 00:48:36

关于UNIX/Linux下安装《UNIX环境高级编程》源代码的问题的相关文章

Linux下安装php环境并且配置Nginx支持php-fpm模块[www]

Linux下安装php环境并且配置Nginx支持php-fpm模块 http://www.cnblogs.com/freeweb/p/5425554.html 5分钟搭建 nginx +php --------------(LNMP)新手专用 http://blog.csdn.net/dyllove98/article/details/41120789 配置Nginx来支持php http://www.cnblogs.com/jecyhw/p/5504855.html nginx+php的配置与

Linux下安装Java环境配置

1.下载安装文件 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.在usr目录下建立java安装目录 cd /usr mkdir java 3.将安装文件拷贝到java目录下,并执行解压命令 tar -zxvf jdk-8u151-linux-x64.tar.gz 4.设置环境变量 vim /etc/profile 在文件末尾添加如下内容: JAVA_HOME=/

Linux下安装JDK 环境

Linux下安装JDK 系统环境 [[email protected] ~]# file /sbin/init /sbin/init: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped [[email protected] ~]# cat /etc/redhat-release CentOS re

linux下安装python环境

1.linux下安装python3wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz 在安装包中有一个README的文件,里面有写如何安装 ./configure make make install 2.安装pip easy_install pip 注:--no-check-certificate 表示安装时“不检查证书”,不加上可能无法安装.

Linux下安装Java环境配置步骤详述

0.下载jdk8 登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html选择对应jdk版本下载.(可在Windows下下载完成后,通过文件夹共享到Linux上) 1. 登录Linux,切换到root用户 su root 获取root用户权限,当前工作目录不变(需要root密码) 或 sudo -i 不需要root密码直接切换成root(需要当前用户密码) 2. 在usr目录下

Linux下安装LANMP环境

记录下来,方便下次再用时从头查找资料 首先是操作系统和php环境:CentOS 6.5 64位(之所以不是7.0是因为本身对linux不熟,而7.0改变挺大的,搜索查询也不好搜索),Php版本:5.3(程序要求,没办法,这也是用lanmp的原因,因为它可以选择好几个版本且包含5.3) 具体步骤: 1.获取root账号密码,用putty链接阿里云,查看是否有数据盘,如果有需要挂载数据盘,具体请查看阿里云论坛中的教程: #查看是否有数据盘 fdisk -l #假如有数据盘,名称为/dev/xvdb,

[转]Linux下安装Java环境配置步骤详述

1.下载jdk8 登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择对应jdk版本下载.(Tips:可在Windows下载完成后,通过FTP或者SSH到发送到Linux上) 如果你的linux可以联网,也可以通过wget命令进行下载.可以参考这篇文章:每天一个linux命令 2.登录Linux,切换到root用户 su root 获取root用户权限,当前工作目录不

Linux下安装php环境并且配置Nginx支持php-fpm模块

因为php安装需要编译,所以服务器应该保证gcc和g++环境的安装 首先释放安装包: tar -xvzf php-5.6.27.tar.gz cd php-5.6.27 接下来进行参数配置,配置前如果没有libxml2和libxml2-devel会报错,所以应该更新libxml2并安装libxml2-devel,使用在线安装: yum -y install libxml2 yum -y install libxml2-devel 补充,因为不同的操作系统环境,系统安装开发环境包的完整程度也不相同

linux下安装Groovy环境

Groovy是Java平台上设计的面向对象的动态编程语言.跟Java一样运行在JVM上. 首先,在Groovy官网下载二进制安装包:http://www.groovy-lang.org/download.html groovy-binary-2.4.3.zip 解压..这里我解压到/opt目录下 配置环境变量:在/etc/profile文件最后添加 #set groovy environmentexport GROOVY_HOME="/opt/groovy-2.4.3"export P