tlpi_hdr.h头文件的使用以及配置

本章介绍系统编程的基础概念和一些后续章节用到的函数及头文件,并说明了可移植性问题。

系统调用是受控的内核入口,通过系统调用,进程可以请求内核以自己的名义去执行某些动作,比如创建子进程,执行I/O操作,进行进程间的通信等。

系统调用与C语言的函数调用类似。但是系统调用的过程比C语言函数调用复杂,开销也大得多。

Linux 的系统调用通过 int 0x80 实现,用系统调用号来区分入口函数。操作系统实现系统调用的基本过程是:

应用程序调用库函数(API);

API 将系统调用号存入 EAX,然后通过中断调用使系统进入内核态;

内核中的中断处理函数根据系统调用号,调用对应的内核函数(系统调用);

系统调用完成相应功能,将返回值存入 EAX,返回到中断处理函数;

中断处理函数返回到 API 中;

API 将 EAX 返回给应用程序。

本章后续部分重点介绍了后面章节所要使用的头文件及其实现,主要如下:

ename.c.inc

error_functions.h

get_num.h

tlpi_hdr.h

其中ename.c.inc文件定义了一个字符串数组,用于对应错误码的名称。

error_functions.h文件声明了本书自定义的错误处理函数。

get_num.h文件声明了本书自定义的数值提取函数。

tlpi_hdr.h文件则包含了后续需用到的系统调用头文件。

由于存在3个头文件以及2个实现,每次编译时必须对实现也进行编译,为方便后续学习,采用将头文件复制到默认的编译器寻找目录下,并将实现打包成静态库,然后使用别名来默认链接静态库。

以Debian/Ubuntu为例,具体操作如下:

第一步:下载本书所给的源码文件

wget "http://man7.org/tlpi/code/download/tlpi-161214-dist.tar.gz"

或者点此下载

第二步:解压后,make编译

tar -zxvf tlpi-161214-dist.tar.gz

cd tlpi-dist/

make -j

第三步:拷贝头文件至系统目录

cd lib/

sudo cp tlpi_hdr.h /usr/local/include/

sudo cp get_num.h /usr/local/include/

sudo cp error_functions.h /usr/local/include/

sudo cp ename.c.inc /usr/local/include/

第四步:制作静态库文件

g++ -c get_num.c error_functions.c

ar -crv libtlpi.a get_num.o error_functions.o

sudo cp libtlpi.a /usr/local/lib

第五步:简化编译命令

alias gl++='new() { g++ $1 -ltlpi;}; new'

第五步需要在当前用户的主目录下的.bashrc文件中设置别名,由于alias不支持参数,因此需要使用函数来间接实现,并且接受一个参数$1以指定对某个源文件进行编译并链接之前的静态库libtlpi.a。配置完毕后重新读入.bashrc文件以生效。这里使用函数来接受一个参数存在一个缺点即只能使用一个命令行参数,多余参数将被忽略。

完成上面的步骤后,即可使用快捷命令来编译我们的程序了:

gl++ main.cpp

该命令将编译生成a.out文件。

如果不想使用第五步来简化,则每次编译手动来链接库,命令如下:

g++ main.cpp -o main -ltlpi

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,820评论 0 10
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,586评论 9 467
  • 放荡不羁的想要自由 多愁善感的只是内容 而她如幽兰静静出现 直到你找寻到她的踪迹 一袭白衣 淡漠从容 时光静好 温...
    一袭白衣仅是你阅读 179评论 1 0
  • 突然的某一天 公主被赋予了魔法 对这样的意外之力 选择了手足无措的逃避 关上城门 戴上手套 本来美好的一切 都成了...
    妮可米唯阅读 250评论 0 2
  • 我开始回忆你了,我准备回忆你了,这样的话我是不是就不能拥有你了?我一直都不敢写却又想写,我怕有一天你不在我身边也不...
    白日M阅读 256评论 0 0