写这篇博文是因为之前这篇文章:http://blog.youkuaiyun.com/fanfank/article/details/9418545
APUE在2013年出了新版(第三版),不知道里面的代码运行情况如何。所以我以下关于代码的注记,是针对APUE(第二版,2005年)的,而且主要针对使用LINUX的读者,我使用的是Ubuntu 12.04。其实只要使用的是类UNIX系统,道理基本上都是一样的,所以如果你使用的是MAC OS X,或者其它的LINUX操作系统,当你找不到其它适合你的系统的方法时,也可以参考一下我写的内容。
在看这篇博客的时候,我不是一次全部写完的,会逐步按章节更新,所以这篇东西,除非明确在最后注明“主要章节已更新完毕”,否则就还是会更新的。目前的进度是:完成到“第1章 UNIX基础知识”
本文出处地址:http://blog.youkuaiyun.com/fanfank/article/details/17411867,如果有幸被转载,请高抬贵手注明出处
————————正文————————
第0章 事前准备
不好意思这是我自己作的一个章节,APUE中并不存在这一章……特此注明。
首先,所有的例程代码可以从www.apue.com下载,我之前下载的就是2005年那本书的代码了,哈哈。
然后,在正式运行本书的程序之前,你需要按照以下步骤,来“安装”一下运行APUE相关的代码到你的机器中(其实就是把头文件放到include默认寻找的目录中),“安装”步骤,请参见:http://www.cnblogs.com/rockics/archive/2010/12/20/1911784.html
然后,另外一个问题就是很多人会碰到的,在编写APUE代码的时候,总是无法使用err_sys,err_quit等函数(各位如果不确定,可以先试一下1-1的代码是否可以运行,可以运行则没有问题,不能运行的话,请参见接下来的蓝字部分操作,其实主要代码来自程序清单B-2,程序清单B-3):
首先去下载这两个文件:error.c,errorlog.c
直接在上面点击文件名或者去我的资源那里找到“APUE程序清单B-xxxx”就可以,不需要资源分。假设你下载的目录是“downloads”,即路径是“~/downloads”。然后把这两个文件复制到/usr/include这个目录中,具体的控制台命令是:
sudo cp ~/downloads/error.c ~/downloads/errorlog.c /usr/include
然后输入密码就复制过去了。
然后在控制台进入/usr/include这个目录,命令是:
cd /usr/include
进行过安装后,“apue.h”这个文件就已经在目录中了,这个时候打开"apue.h",在最后面一行(即#endif /* _APUE_H */)前面,加上int log_to_stderr = 1,#include "error.c"以及#incude "errorlog.c",变成下面这样:
...
int log_to_stderr = 1; //注意以后如果要调用daemonize函数,必须记得将其设置为0
#include "error.c"
#include "errorlog.c"
#endif /* _APUE_H */
这样,就可以了。
来到这里,就应该可以开始敲原书的代码了,下面我就逐章列出每节代码可能碰到的问题。最后一个说明,直接简单地编译例程(例如程序清单1-1)的命令是:
gcc 1-1.c -o 1-1
然后执行编译出来的程序的命令是(书中的可执行文件都是a.out,是因为书上的编译是直接gcc 1-1.c,这样得到的文件不是1-1而是a.out):
./1-1
如果提示权限不够,那么这样好了:
chmod 777 1-1
./1-1
这下就真的可以开始啦……
第1章 UNIX基础知识
经过测试,第一章代码没有问题,全部照敲再编译即可运行
代码地址:https://github.com/fanfank/apue2e/tree/master/ch1
第2章 UNIX标准化及实现
第3章 文件I/O
第4章 文件和目录
第5章 标准I/O库
第6章 系统数据文件和信息
第7章 进程环境
第8章 进程控制
第9章 进程关系
第10章 信号
第11章 线程
第12章 线程控制
第13章 守护进程
第14章 高级I/O
第15章 进程间通信
第16章 网络IPC: 套接字
第17章 高级进程间通信
第18章 终端I/O
第19章 伪终端
第20章 数据库函数库
第21章 与网络打印机通信