unix高级环境编程--unix基础知识

时间:2021-09-07 22:14:07

文件描述符:

是一个非负数,内核用它特定进程正在访问的文件。当打开或创建一个文件的时候,它会返回一个文件描述符。在读写文件的时候使用它指向的file结构体来操作文件

一般创建的文件描述符是尽可能小的非负整数。

当运行一个程序的时候,所有的shell都会打开3个文件描述符:标准输入,标准输出,标准错误。按照惯例unix系统shell使用文件描述符0与进程的标准输入相关连,文件描述符1与进程的标准输出相关连,文件描述符2与进程的标准错误相关连。在依照POSIX的的应用程序中,在头文件<unistd.h>中定义了符号常量STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO分别代表文件描述符0, 1, 2。

系统IO带缓冲与不带缓冲IO 的区别:

带缓冲:是由标准C库实现的,第一次调用文件操作函数时,标准库会自动分配并且读出一段固定大小的内容哦能否存储在缓存中。就是说以后每次对文件的操作是直接针对内存中的缓存的,而不是硬盘上的文件。

不带缓存的文件操作: 通常是系统提供的系统调用,更加低级,直接从硬盘读取和写入文件,由于IO瓶颈的原因,而且原子操作需要程序员自己保证。

标准库中的带缓冲的文件IO操作是调用系统提供的不带缓存的IO实现的。

程序:

“存储在磁盘上、处于某个目录中的一个可执行文件。” --《unix环境高级编程》。程序只是一个普通文件,是机器代码指令与数据的集合,这些指令和数据存储在磁盘上的一个可执行映像(可执行映像就是可执行内容)

进程:

“程序的执行实例被称为进程”--《unix环境高级编程》。就是说:程序具体的实现过程是由进程来实现的,进程可以认为是运行中的程序,除了包含程序中的所有内容(机器代码指令和数据)还包括程序执行时系统中的数据。

进程与程序的关系图:

unix高级环境编程--unix基础知识

进程与程序的详细内容请参考http://oss.org.cn/kernel-book/ch04/4.1.htm