《UNIXLinux程序设计教程》一1.5 示例程序和编译环境

1.5 示例程序和编译环境

本书给出了大量说明UNIX API函数用法的示例程序,这些示例程序中绝大多数都是可运行的完整程序,并且都能够在安装有Linux系统的PC机上运行。另外,因为它们都遵从UNIX标准,因此也基本无须修改就可以在其他任何UNIX系统中运行。你可以从华章网站得到本书中所有示例程序的源代码。
得到源代码后,可以用如下命令解开下载的源程序包unixexam.tar.gz:

%tar zxf unixexam.tar.gz

每一章的示例程序组织在以章节号命名的子目录中。第1章的例子位于目录~/exam/ch01,第2章的例子位于目录~/exam/ch02,等等。示例程序基本按它们出现的章节依次命名,例如,第1章的程序1-1命名为p1-1,程序1-2命名为p1-2;第7章的程序7-12命名为p7-12。但有少数程序除外,它们是其他程序要调用的函数或作为头文件。这种程序以函数名或头文件名命名。例如,每一章都需用到程序1-1,该程序的文件名是err_exit.h。同样,有几章中有若干个程序要用到程序5-6中定义的函数xmalloc(),因此该示例程序的文件名为xmalloc.c。
另外,为了减少示例程序中代码的篇幅,我们将同一章示例程序包含的所有头文件集中说明在一个头文件中,并以“ch”后随章节号命名,例如,第8章的头文件是ch08.h。
在Linux中编译本书的例子可使用如下编译命令:

%gcc p1-3.c –o p1-3

它编译程序p1-3.c并生成可执行文件p1-3。也可以使用下面更简单的命令:

%gcc p1-3.c 

它生成默认的可执行文件a.out。
在本书以后的章节中,当涉及程序运行时,我们不再给出编译命令,并且假定a.out和所有与源程序主干名同名的文件都是上下文提及源程序的已编译过的可执行文件。
如果示例程序中用到了数学库函数、实时库函数或Pthreads线程库函数,则还要注意在编译命令中分别指明相应的库。例如:

%gcc p7-4.c –lm              //用到了数学库函数
%gcc p8-9.c –lrt             //用到了实时库函数
%gcc p13-1.c –Pthread        //用到了Pthreads库函数
时间: 2024-09-15 15:15:19

《UNIXLinux程序设计教程》一1.5 示例程序和编译环境的相关文章

《UNIXLinux程序设计教程》一导读

前言 十年前,我们出版了<UNIX程序设计教程>(清华大学出版社).十年来,影响UNIX编程接口的规范和标准发生了较大变化,当时写书参照的"Single UNIX Specification 2"现在已发展到了"Single UNIX Specification 4",而若干分离独立的规范和标准,包括Single UNIX Specification,现在都已经统一在POSIX.1-2008标准之下.同时,随着Linux系统的成熟和发展,UNIX系统已不

BCB 的程序在编译环境中没事,但是运行EXE后白屏

问题描述 BCB 的程序在编译环境中没事,但是运行EXE后白屏 BCB 的程序在编译环境中没事,但是运行EXE后白屏,这是在WINXP下,在WIN2000下没有这种情况发生.

《UNIXLinux程序设计教程》一3.2 read()和write()函数

3.2 read()和write()函数 对文件描述字进行基本输入输出操作的函数是read()和write(). #include <unistd.h> ssize_t read (int filedes, void * buffer, size_t nbytes); ssize_t write (int filedes, const void * buffer, size_t nbytes); read()从已打开的.与文件描述字filedes相连的文件中读至多nbytes个字节的数据放到b

《UNIXLinux程序设计教程》一1.7 系统信息

1.7 系统信息 当我们面对一台计算机时,首先想要了解的可能是这台机器的系统特征,如机器的名字.操作系统的名称和版本号.系统的能力和限制等信息.这一节介绍几个获取主机信息的函数,下一节讨论系统的能力限制值. 1.7.1 机器标识 每一台机器都有一个主机名.主机名由系统管理员指定,在网络中主机名可能是一个网络域名.函数gethostname()和sethostname ()可用来获取和设置主机名. #include <unstd.h> int gethostname (char *name,si

《UNIXLinux程序设计教程》一1.4 系统库

1.4 系统库 系统库给应用程序提供编译好的标准函数和系统调用函数的目标代码,这些代码在连接时与应用程序的目标代码装配在一起形成一个完整的可执行程序.UNIX系统库由许多专门的库组成,如C标准库.数学库.线程库.实时库等.本书将要介绍的函数和系统调用基本上都包含在系统库的C标准库中,也有部分包含在线程库和实时库中. C标准库不仅包含了C标准规定的函数(不包括科学计算函数以及国际化和宽字符函数),而且包含了POSIX标准定义的大部分编程接口函数.当我们编译C源程序时,编译器会自动地连接C标准库.但

《UNIXLinux程序设计教程》一1.9 思考与练习

1.9 思考与练习 你是否有志于为中国计算机软件的开发做出自己的贡献?从UNIX和Linux的诞生历程中,你能感悟到什么? 标准对应用开发有什么意义?标准是一成不变的吗?UNIX的发展中主要出现了哪几种版本和哪几种标准?目前主流计算机开发商遵循的是什么标准? Linux服从此标准吗? 什么是进程?用UNIX的ps(1)命令查看你的系统中的所有进程以及它们的状态信息.你能看到哪些进程,能看到进程的几种状态? 什么是系统调用?它与普通函数有何不同? 在你的机器上运行程序1-2,查看机器的主机名.操作

《UNIXLinux程序设计教程》一1.2 标准

1.2 标准 UNIX变体的激增产生了许多兼容性问题,特别是各种商业UNIX变体的出现使情况变得更加复杂.系统V和BSD在许多方面不同-它们有不同且互不兼容的物理文件系统.网络机制和虚拟内存结构.这些不同中有一些限制在内核设计和实现上,但另一些出现在程序设计接口层,这导致没有一个复杂的应用程序能够不加修改地同时运行于系统V和BSD系统.另一方面,商业变体常常带有各自的增值特征,应用程序员常常搞不清它们.结果,为了保证程序在各种不同的UNIX上都能工作,程序员不得不付出极大的努力.这种情形导致了对

《UNIXLinux程序设计教程》一第1章 UNIX导论

第1章 UNIX导论UNIX是一个"历史悠久"的操作系统.在开始讲述UNIX环境程序设计方法之前,我们先回顾UNIX的诞生.成长和发展历程,介绍UNIX发展过程中出现的若干标准.回顾UNIX的发展历史,有助于我们了解它具有如此强大生命力的原因,并把握它未来的发展方向:了解UNIX的标准,可以使我们理解和区分UNIX的不同实现与版本之间的区别,并编写出可移植性更好的程序.随后,作为后继章节的基础,本章将讲述UNIX的一些基本概念,并介绍与UNIX全系统有关的一些内容,例如系统信息.系统能

《UNIXLinux程序设计教程》一1.1 UNIX简史

1.1 UNIX简史 UNIX早在MS DOS.Windows出现之前就已经诞生了,到现在已有四十多年的历史. 1.1.1 UNIX的诞生 1965年麻省理工学院的MAC课题组和通用电气公司一起启动了一个项目-开发一个新的称为Multics的多用户.交互式操作系统.Multics的目的是向大用户团体提供同时计算和存储的能力.在当时批处理系统为主流的情况下,这是一个创新的概念.此后不久,贝尔实验室的计算科学研究中心也加入了这一计划.但在1969年,这个研究组认为开发Multics需要更长的时间,于