littlebot
Published on 2025-04-08 / 1 Visits
0

【源码】基于C语言的UNIX环境高级编程项目

项目简介

本项目是《Advanced Programming in the UNIX Environment se2》的源代码及问题解决方案。代码文件围绕UNIX或Linux系统的多种任务展开,涵盖操作系统接口、文件操作、进程间通信、信号处理、伪终端管理、多线程编程和终端控制模式等,展示了C语言在Unix/Linux环境下的丰富应用。

项目的主要特性和功能

  • 提供多种操作系统接口相关代码,可处理命令行参数、文件描述符和锁定等。
  • 包含文件操作代码,实现简单的文件读写。
  • 具备进程间通信和信号处理功能,能处理信号和中断。
  • 有伪终端管理代码,可创建和配置伪终端对。
  • 提供多线程编程和终端控制模式的实现。
  • 包含数据库相关代码,可创建和管理数据库。

安装使用步骤

编译步骤

  1. 在http://www.apuebook.com/下载src.tar.gz源代码的压缩包。
  2. 修改 Make.defines.linux中的WKDIR为解压后apue.2e文件夹所在路径,如 WKDIR=/home/kolya/Downloads/
  3. 修改 apue.2e下 std/linux.mk,将所有nawk改为awk。
  4. 返回apue.2e,执行make。

解决编译错误

错误1

gcc -DLINUX -ansi -I/home/kolya/Downloads/apue.2e/include -Wall -D_GNU_SOURCE -DDEBUG -c -o printd.o printd.c In file included from printd.c:6:0: ipp.h:122:17: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘.’ token #define status u.st ^ 解决方法:在apue.2e/ipp/ipp.h中定义的宏定义status和/usr/include/i386-linux-gnu/bits/timex.h中的成员status冲突,修改apue.2e/ipp/ipp.h文件中的宏名称,例如改为status_apue,即 #define status_apue u.st,然后将apue.2e/ipp/printd.c中977行的 hp->status 改为 hp->status_apue

错误2

gcc -DLINUX -ansi -I/home/kolya/Downloads/apue.2e/include -Wall -D_GNU_SOURCE -c -o getenv1.o getenv1.c getenv1.c:4:20: error: ‘ARG_MAX’ undeclared here (not in a function) static char envbuf[ARG_MAX]; 解决方法:在apue.2e/include/apue.h中添加一行 #define ARG_MAX 4096,打开apue.2e/threadctl/getenv1.c 和apue.2e/threadctl/getenv3.c,添加一行 #include "apue.h"

安装头文件和库文件

make成功后会在 apue.2e/lib下生成libapue.a等文件,执行以下命令: sudo cp .../apue.2e/include/apue.h /usr/include sudo cp .../apue.2e/lib/libapue.a /usr/lib/ sudo cp .../apue.2e/db/apue_db.h /usr/include sudo cp .../apue.2e/db/libapue_db.a /usr/lib/

编译书中例子

之后编译书中例子时,要将 #include "apue.h" 改为 #include <apue.h>,同时编译时要链接libapue,例如: kolya@asus ~/src/APUEse2/chap1_UNIX_System_Overview $ gcc 1-1.c -o 1-1 -lapue

编译第20章数据库相关程序

编译第20章数据库相关程序时,将 #include "apue_db.h" 改为 #include <apue_db.h>,链接时除了加上libapue.a,还要链接libapue_db.a。

注意事项

-lapue 写在了源程序的前面会出现错误,例如 gcc ls1.c -o ls1 -lapue,因为 .a 在链接的时候,必须放在文件之后,.so 在链接的时候,对位置没有要求,前后都可以。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】