APUE学习记录(一)

来源:互联网 发布:linux根目录介绍 编辑:程序博客网 时间:2024/06/06 12:31

apue.h配置

1.在http://www.apuebook.com/下载源码

2.tar -zxvf  src.3e.tar.gz 解压

3.进入apue.3e执行make

4.#cp ./include/apue.h/usr/include 将apue.3e/include的apue.h复制到/usr/include

5.#cp ./lib/libapue.a/usr/lib 将apue.3e/lib/libapue.a这个静态库复制到/usr/lib

6.在编译时链接静态库libapue.a。如gcc main.c -lapue -o main

 

系统调用(system call)

所有的操作系统都提供了多种服务的入口,由此程序向内核请求服务。Linux系统在用户程序和内核之间提供了一个像过程一样的接口,叫做系统调用

如果一个进程正在用户态运行一个用户程序,并且需要一个系统服务,如从一个文件读取数据,那么它就必须执行一个陷阱(trap)或者系统调用指令,将控制转移到操作系统。操作系统接着通过参数检查,找出所需的调用进程。然后,它执行系统调用,并把控制返回给在系统调用后面跟随的指令。read有三个参数,第一个参数指定文件,第二个指向缓冲区,第三个说明要读出的字节数。它的调用是由C程序完成,方法是调用一个与该系统调用名称相同的库过程。

为了更加清晰的说明系统调用机制,我们以read系统调用为例。由C程序进行的调用可有如下形式:

count = read(fd, buffer, nbytes);

系统调用在count中返回实际读取的字节数。

下图展示系统调用的具体步骤:


Linux IA32 系统调用

Linux提供了上百种系统调用,当应用程序想要请求内核服务时可以使用。每个系统调用都有唯一一个的整数号,对应一个到内核中跳转表的偏移量。在IA32系统上,系统调用是通过一条称为int n 的陷阱指令来提供的。

系统调用和库函数

unix所使用的技术是为每个系统调用在标准C库中设置一个具有同样名字的函数。用户进程用标准C调用序列来调用这些函数,然后,函数用系统所要求的技术调用相应的系统核服务。例如函数可将一个或几个C参数送入通用寄存器,然后执行某个产生软中断进入系统核的机器指令。从应用角度考虑,我们可将系统调用视作为C函数。

从实现者的角度,系统调用和库函数之间有根本的区别,但从用户角度,其区别并不非常重要。 我们应当理解,如果希望的话,我们可以替换库函数,但是系统调用通常是不能被替换系统调用。

应用程序可以或者调用系统调用,或者库函数,而很多库函数则会调用系统调用

另一个系统调用和库函数之间的差别是:系统调用通常提供一种最小接口,而库函数通常提供比较复杂的功能。



参考 《Unix环境高级编程》

         http://www.cnblogs.com/wuyuegb2312/p/3369082.html


0 0
原创粉丝点击