《Unix环境高级编程》笔记

基础

Unix操作系统体系结构

操作系统就是一种软件,它管理控制计算机的硬件资源,提供程序运行的环境,这种软件又被称为内核(Kernel)。内核提供的接口被称为系统调用(System call), 公共函数库建立在系统调用之上,应用程序可以使用公共函数库也可以自己执行系统调用。Shell是一个特殊的应用程序,为其他程序提供了接口。

图片名称

文件与目录

文件系统中所有东西的起点都是根目录(root),这个目录的名称是“/”。创建新目录时,会自动创建两个文件名 . (点)和 .. (点点)。点指向当前目录,点点指向父目录。以斜线开头的路径名称为绝对路径名(absolute pathname),否则称为相对路径名(relative pathname)。相对路径名指向相对于当前目录的文件。所有进程都有一个工作目录,所有相对路径名从工作目录开始解释。

输入与输出

  • 文件描述符
    文件描述符(file descriptor)通常是一个小的非负整数,内核用以标识一个特定进程正在访问的文件。当内核打开一个现有文件或创建一个新文件时,都会返回一个文件描述符。
  • 标准输入,标准输出,标准错误
    每当运行一个新程序,shell都将为其打开3个文件描述符,即标准输入(standard input),标准输入(standard output)和标准错误(standard error)。如果不做特殊处理,三个文件描述符都将链接向终端,当然他们也可以被重定向到某个文件,例如ls > file.txt
  • 不带缓冲的I/O
    函数open, read, write, lseek, close提供了不带缓冲的I/O
  • 标准I/O
    标准I/O为不带缓冲的I/O提供了带缓冲的接口。最熟悉的标准I/O函数是printf

程序和进程

程序是存储在磁盘上某个目录中的可执行文件,内核使用exec函数,将程序读入内存,并执行。程序的执行实例被称为进程(process),unix系统保证每个进程都有一个唯一的非负数字标识符,称为进程id。有三个用于进程控制的主要函数,fork,execwaitpid。一个进程内的所有线程共享同一地址空间,文件描述符,栈和与进程相关的属性,因为他们能访问同一存储区,所以各个线程在访问共享数据时需要采取同步措施来避免不一致性。线程也用id标识,但此id只在该进程内起作用。

用户标识

用户ID为0的用户为根用户(root),根用户对系统有自由地支配权,有些操作系统功能只向根用户提供。

信号

信号(signal)用于通知进程发生了某种情况。例如,除零操作将触发SIGFPE信号(浮点异常)发送给该进程。进程有三种方式处理信号,1)忽略信号,2)按照系统默认方式处理,例如除零的默认处理是终止该进程
3)提供函数,信号发生时调用该函数。
终端键盘上有两种产生信号的方法,一个是中断键(Ctrl + C 或 Delete), 和退出键(Ctrl + \)。调用kill函数,可以从一个进程向另一个进程发送信号,这需要确保你是被kill进程的所有者或者根用户。

posted @ 2022-07-05 10:48  rachel_aoao  阅读(29)  评论(0编辑  收藏  举报