美文网首页
Unix环境编程1-2

Unix环境编程1-2

作者: m风满楼 | 来源:发表于2018-09-29 14:37 被阅读0次

    第一章 unix基础知识

    1.1 unix体系结构

    • 操作系统(也叫内核)是一种控制协调计算机硬件资源的软件,为程序运行提供环境
    • 内核的接口被称作系统调用,公用函数库构建在系统调用之上
    • 应用软件既可以使用系统调用,也可以使用公用函数库
    • shell 是一种特殊的应用程序,他为运行其他程序提供了一个接口。
    • 操作系统除了内核外还有一些其他的软件,包括系统实用程序,shell,应用软件和一些公用函数

    1.3 登陆

    • 登录时检查登录名所在文件系统口令文件(/etc/passwd),密码存放到另一个叫影子文件的文件中。
    • 用户登录后,系统显示一些系统信息后,就载入shell程序(shell是一个和系统交互的门),用户使用哪个shell在口令文件中最后一个字段给出

    1.4 文件和目录

    • unix文件系统是由文件和目录组成的一种层次结构
    • 文件属性由文件类型,文件大小,所有者,权限,修改时间等组成
    • 创建新目录时会自动创建. 和 .. 两个文件名,表示当前和父目录
    • 每个进程都有一个工作目录,所有相对路径都以工作目录开始解析,chdir可以修改其工作目录,
    • 用户登陆后进入起始目录,该目录在用户口令文件中指名

    1.5 输入和输出

    • 文件描述符
      • 内核用它来描述一个特定进程正在访问的文件,当内核打开一个已有文件或者新建一个文件时,它返回一个fd,在读写文件时使用它
      • 当运行一个新程序时,所有shell为其打开三个文件描述符:标准输入,标准输出,标准错误,如果没有手动设置,这三个文件描述符都链向终端
    • 不用缓冲的I/O
      • 函数open(),read(),write(),lseek(),close()提供了不用缓冲的I/O,这些函数都适用文件描述符
      • read()函数返回读取的自己数
    
    
    • 标准I/O
      • 标准I/O提供了一种对不用缓冲I/O函数带函数的接口。
      • 使用标准io不用考虑如何选取缓冲区的大小,并简化输入行的处理

    1.6 程序和进程

    • 程序
      • 程序是存放在磁盘上的某个可执行文件,exec函数可以将程序读入内存执行
      • 进程
        • 程序的执行实例被称作进程
        • unix系统确保每个进程都有一个唯一的数字标志符,即pid
      • 进程控制
        • 有三个用于控制进程的函数:fork,exec(有六种变体,统称为exec),waitpid,
        • 调用fork创建新进程的时候,新进程是调用进程的一个副本,调用进程叫父进程,新创建的叫子进程,fork对父进程返回新的子进程的id,对子进程返回0
        • fork创建一个新进程,所以他被调用一次,但是返回两次(分别在父进程和子进程中)
        • 在子进程中,调用execlp执行从标准输入读入的命令。这样就用新的程序文件替换进程原先执行的文件。
      • 现场和线程id
        • 一个进程内的所有线程共享同一地址空间,文件描述符,栈和进程相关属性
        • 多线程之间能访问同意存储区,所以对于共享数据的访问要进行同步避免数据不一致

    1.7 出错处理

    • 当unix系统函数出错的受,通常会返回一个负值切整形变量errno通常被设置为具有特定信息的值
    • 文件<errno.h>定义了errno以及可以赋予它的各种常量
    • 在多线程环境中,每个线程都有自己的局部errno,以避免一个线程干扰另一个线程
    • 出错恢复
    • 出错分为两类
      • 致命性和非致命性
        • 致命性错误,无法执行恢复动作
        • 对于非致命性错误,有时可以较妥善的进行处理,大多数非致命性错误是暂时的(如资源短缺)
        • 对于资源相关的非致命性错误的典型恢复操作是延迟一段时间,然后重试 。

    1.8 用户标识

    • 用户id
      • 口令文件登陆项中的用户id是一个数值,向系统标志不同的用户
      • 用户id为0的用户为超级用户,登录名为root
      • 如果进程具有超级用户特权,则大多数文件权限检查都不再执行
    • 组id
      • 口令文件登陆项也包括用户的组id,它是一个数值,由系统管理员在指定用户登录名时分配。
      • 组被用来同组之间各个成员的资源共享(比如说文件)
      • 组文件将组名映射为数值的组id,组文件通常时/etc/group
    • 附属组id
      • 除了在口令文件中对要给登陆名指定一个组id外,大多数unix系统版本还允许一个用户属于另外一些组

    1.9信号

    • 信号用于通知进程发生了某种情况
    • 进程有以下三种处理信号的方式
      • 忽略信号
      • 按系统默认方式处理
      • 提供一个函数,信号发生时使用该函数,称作捕捉这个信号
    • 终端键盘上有两种产生信号的额方法,分别称为中断键(interrupt key)和推出键(quit key),他们被用于中断当前进程。
    • 另一种产生信号的方法时kill函数。在一个进程中调用此函数就可以向另一个进程发送一个信号

    1.10 时间值

    • unix使用两种时间
      • 日历时间
        • UTC时间从1970.1.1经过的秒数
      • 进程时间
        • CPU时间,度量进程使用的CPU资源。进程时间以时钟滴答计算
    • 当度量一个进程执行时间时,unix系统维护了3各进程时间值
      • 时钟时间,又称墙上始终时间,是进程运行的时间总量,其值于系统中同时运行的进程数目有关
      • 用户CPU时间,执行用户指令所用的时间量
      • 系统CPU时间,该进程执行内核进程所经历的时间。
    • 用户CPU时间和系统CPU时间被称为CPU时间

    1.11 系统调用

    • 操作系统提供服务的入口点叫系统调用
    • linux3.2.0有380各系统调用
    • unix如何进行系统调用?
      • unix所使用的技术是为每个系统调用在标准C库中设置一个具有同样名字的函数。用户名称用标准C调用来调用这些函数,然后函数又用系统所要求的的技术调用相应的内核服务。
    • 应用程序即可以调用系统调用又可以调用库函数
    • 系统调用通常提供最小接口,而库函数通常提供比较复杂的功能

    第二章 unix标准及实现

    2.2 unix标准化

    • restrict关键字告诉编译器,哪些指针引用可以被优化。
    • 标准定义一种接口的规范而不是实现,厂商采用标准转换成具体的实现。

    2.5 限制

    • 限制由两种
      • 编译时限制,可在头文件中定义
      • 运行时限制,需要调用一个函数得到
    • 2.5.4
    • 函数sysconf,pathconf,fpathconf
    • sysconf限制是和文件或者目录无关的运行时限制
    • pathconf和fpathconf是和文件目录有关的运行时限制
    #include <unistd.h>
    long sysconf(int name) ;
    long pathconf(const char *pathname, int name) ; //用路劲名做参数
    long fpathconf(int fd, int name) ;      //用文件描述符作为参数
    

    name参数是表示系统限制的常量,再apue第34页由定义

    • SC开始的常量用于标识运行时限制sysconf的name
    • PC开始的常量用于标识运行时限制的pathconf和fpathconf所使用的name。

    相关文章

      网友评论

          本文标题:Unix环境编程1-2

          本文链接:https://www.haomeiwen.com/subject/iggqnftx.html