天天看点

《UNIX环境高级编程》笔记:第1章 UNIX基础知识

“本章快速浏览了UNIX系统。说明了某些以后会多次用到的基础术语,介绍了一些小的UNIX程序实例。读者可以从中大概了解到本书其余部分将要介绍的内容。”

书中有些图很重要,没办法只好先下载电子版再自己截图了。

1.2 UNIX体系结构

《UNIX环境高级编程》笔记:第1章 UNIX基础知识

这张是UNIX操作系统的体系结构。要注意的是,shell和公用函数库并没有把内核完全包围,应用程序可以直接使用系统调用来和内核交互。

1.3 登陆

1.4 文件和目录

ls:列出目录中的所有文件。

man:查看系统手册。

cc / gcc:C编译器。

1.5 输入和输出

文件描述符是一个小的非负整数,在POSIX标准中,标准输入的文件描述符的值是0,标准输出是1,标准错误是2,不过这些值可以人为改变。

> / <:文件重定向,经常用来把所执行程序的标准输出等重新指向某个文件,从而让原本输出到屏幕的文字输出到指定文件中。

|:管道,左边的程序的输出和右边程序的输入直接联通。

通过键盘输入时,Ctrl+D通常表示文件结束符,程序读到此字符将认为输入完毕。

不带缓冲的I/O:open, read, write, lseek, close

标准I/O(带缓冲):getc, putc, fgets等

1.6  程序和进程

进程控制函数:fork, exec, waitpid。

UNIX的进程创建和Windows完全不同,第一次看的时候绝对会非常诧异。这个乐趣我就不剥夺了,自己去书中体验吧。

1.7 出错处理

错误代码是errno,打印出错信息使用函数strerror或perror。在现在的系统中,错误代码是线程安全的。

错误代码的两条规则:1、如果没有出错,其值不会被例程清除;2、任何函数都不会将errno值设置为0。

1.8 用户标识

用户ID为0的用户即为超级用户,一个系统中可以有多个ID为0的用户。

附属组ID:为了扩展用户的权限结构而设计。总体来说,UNIX的权限结构比Windows的NTFS系统权限结构要简陋一些。

1.9 信号

键盘上会产生信号的组合键:中断键(interrupt key,通常是Delete或Ctrl+C),退出键(quit key,通常是Ctrl+\)。

调用kill函数可以向其他进程发送信号。

按下中断键时,如果程序忽略此信号,系统就会默认终止此进程。

1.10 时间值

1. 日历时间,UTC 1970年1月1日0时起经历的秒数,数据类型time_t。

2. 进程时间(CPU时间),用来度量进程使用的CPU资源,数据类型clock_t。单位为滴答数,和秒有某种换算关系。进程时间有三种:

2.1 时钟时间,又称为墙上时钟时间(wall clock time),它是进程运行的时间总量。

2.2 用户CPU时间,是执行用户指令所用的时间。

2.3 系统CPU时间,是为该进程执行内核程序所用的时间。

按书中的例子,用户CPU时间加上系统CPU时间并不等于时钟时间,他们之间的关系还有待求证。

1.11 系统调用和函数库

系统调用接口总是在《UNIX程序员手册》的第2部分中说明,是用C语言定义的,与具体系统如何调用一个系统调用的实现技术无关。

《UNIX程序员手册》的第3部分定义了程序员可以使用的通用库函数。虽然这些函数可能会调用一个或多个内核的系统调用,但是它们并不是内核的入口点。

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

《UNIX环境高级编程》笔记:第1章 UNIX基础知识
《UNIX环境高级编程》笔记:第1章 UNIX基础知识

习题 1.2

进程ID为852和853的进程,在我们的两次调用之间被创建了。

继续阅读