前面
本文在摘录了一些基本概念
文件描述符
文件描述符是一些小值整数,用于文件系统在处理文件的时候,标识被处理文件.
因此文件描述符的总数也就是系统可以打开的文件的最大数量
当Linux系统开始运行的时候,有三个文件描述符已经被使用:
- 标准输入:0
- 标准输出:1
- 标准错误:2
其他文件的文件描述符,在调用open函数时返回.文件描述符有操作系统分配,每次分配最小的.
库函数
系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思。面向的是硬件。而库函数调用则面向的是应用开发的,相当于应用程序的api,采用这样的方式有很多种原因:
- 双缓冲技术的实现。
- 可移植性。(系统调用是操作系统相关的,因此一般没有跨操作系统的可移植性。)
- 底层调用本身的一些性能方面的缺陷。
- 让api也可以有了级别和专门的工作面向。
函数库调用 | 系统调用 |
---|---|
在所有的ANSI C编译器版本中,C库函数是相同的 | 各个操作系统的系统调用是不同的 |
它调用函数库中的一段程序(或函数) | 它调用系统内核的服务 |
与用户程序相联系 | 是操作系统的一个入口点 |
在用户地址空间执行 | 在内核地址空间执行 |
它的运行时间属于“用户时间” | 它的运行时间属于“系统”时间 |
属于过程调用,调用开销较小 | 需要在用户空间和内核上下文环境间切换,开销较大 |
在C函数库libc中有大约300个函数 | 在UNIX中大约有90个系统调用 |
典型的C函数库调用:system fprintf malloc | 典型的系统调用:chdir fork write brk; |
/proc文件系统
Linux将一切看做文件,硬件设备在文件系统中也有相应的文件
/proc文件系统,可以看做是一个特殊的文件系统,每一个独立的硬件在这个系统中,都对应着一个文件,用户可以通过proc文件系统像访问文件一样来访问硬件设备。
也可以通过ps -ef |grep xxx获取程序pid,然后在/proc/pid/文件夹下查看该程序的运行情况.