文章目录

  • 第一章 Unix基础知识
    • 1.引言
    • 2.Unix体系结构
    • 3.登录
    • 4.文件和目录
    • 5.输入和输出
    • 6.程序和进程
    • 7.出错处理
    • 8.用户标识
    • 9.信号
    • 10.时间值
    • 11.系统调用和库函数

第一章 Unix基础知识

1.引言

操作系统为应用软件提供服务,包括调度进程,管理内存,文件系统,网络协议栈,设备驱动等等。

2.Unix体系结构

内核 -> 系统调用 -> shell & 公用函数库(e.g. glibc) -> 应用程序
内核 -> 系统调用 -> 应用程序

补充:执行应用程序时处于用户态,进行系统调用后进入内核态

3.登录

1.登录文件:/etc/passwd 文件
2.命令行解释器shell:Bourne shell,Korn shell和Bourne-again shell,dash(Debian Almquist shell)

4.文件和目录

1.文件系统:目录和文件的一种层次结构
2.文件名
3.路径名 :遍历路径下文件ls实现,dirent.h头文件、opendir函数、readdir函数
4.工作目录:进程具有自己的工作目录,可以用chdir函数更改进程的工作目录
5.起始目录:被加载为启动时的工作目录

5.输入和输出

1.文件描述符
2.标准输入、标准输出和标准错误 : 标准输入输出的文件描述符 STDIN_FILENO 和 STDOUT_FILENO
3.不带缓冲的IO: open、read、write、lseek和close,都使用文件描述符对文件操作
4.标准IO: 如gets,为不带缓冲的IO提供了一个缓冲(有块缓冲、行缓冲和无缓冲)
补充:标准IO属于公共函数库的范畴,而不带缓冲的IO属于系统调用的范畴

6.程序和进程

1.程序:未被加载的代码,被内核exec
2.进程和进程ID:程序的执行实例为进程,每个进程有自己的进程ID
3.进程控制:fork,exec和waitpid
4.线程和线程ID:线程是某一时刻执行的一组机器指令,通常一个进程只有一个控制线程,多控制线程可以利用多核能力
思考:进程用于调度不同程序?(内存),线程用于用于调度不同CPU核?(执行)

7.出错处理

1.errno值:当Unix的系统(内核与系统调用)函数出错时,通常该函数会返回一个负值,且(该进程或线程?)事先定义的一个整型变量errno将会被设置为一个具有特定信息的值。
如open函数出错时会返回-1,且此时errno会被赋值为15种不同errno值(如权限不够、文件不存在)之一。
可以使用strerror(int errnum)函数或者perror(const char *msg)函数将errno的值转换为其对应的字符串信息。

#include <stdio.h>
#include <stdlib.h>    //  exit函数头文件
#include <string.h>    //  strerror函数头文件
#include <errno.h>     //  errno变量int main(int argc,char *argv[] )
{// EACCES 是一个errno的可能的取值之一,在errno.h中定义fprintf(stderr,"EACCES:%s\n",strerror(EACCES) );// errno变量,在每一个进程/线程中由内核为其创建,在errno.h中声明errno = ENOENT;   // ENOENT 是一个errno的可能的取值之一,在errno.h中定义// perrno函数会自动将进程中的errno变量读取并转换为字符串信息perror(argv[0] );exit(0);
}

输出如下:

EACCES:Permission denied
FIle: No such file or directory

2.出错恢复:致命性出错一般只能打印后退出;非致命性错误如资源短缺可以延迟后再重试,资源相关的非致命性错误包括EAGAIN、ENFILE、ENOBUFS、ENOLCK、ENOSPC、EWOULDBLOCK等

8.用户标识

1.用户ID:用于让系统标识不同的用户,root用户的用户ID为0( 或用户ID为0的用户为根用户或超级用户),用户ID是口令文件登录项的一个属性
2.组ID:也是口令文件登录项的一个属性,同组用户可以通过修改权限设置共享文件,用户ID和用户组ID是为了让磁盘上的文件不需要存储ASCII登录名及组名,而只需要4个字节存储ID就可以了,用户ID与用户登录名、组ID与组名的映射关系存在于口令文件和组文件中,组文件通常是/etc/group
3.附属组ID:一个用户可以存在于多个附属组中

9.信号

信号用于通知进程发生了某种情况,进程对于信号可以有三种处理方式:忽略信号、按系统默认方式处理或者提供一个函数以备信号发生时调用,即捕捉信号

10.时间值

1.Unix的时间包括日历时间和进程时间,日历时间即自UTC(70年1月1日00:00:00)以来的时间,用类型time_t保存;进程时间是度量进程使用的中央处理器资源的时间,也称CPU时间,用类型clock_t保存。进程时间用时钟滴答计算,每秒钟曾被分为50、60和100个滴答。
2.Unix系统为每一个进程维护3个进程时间值,包括:
(1)时钟时间:又称墙上时钟时间,是进程运行的时间总量,值与系统中同时运行的进程数有关;
(2)用户CPU时间:执行用户指令所用的时间;
(3)系统CPU时间:为该进程执行内核程序所执行的时间,如read、write耗时;

11.系统调用和库函数

1.系统调用:直接进入内核的入口点
2.库函数:有可能wrap了系统调用,有可能没有使用系统调用,如strcpy和atoi

小结:第一章介绍Unix的一些基础知识以及Unix系统为维护一个进程、文件系统等所提供的一些内容。

《Unix环境高级编程》Note——第一章基础知识相关推荐

  1. Unix环境高级编程-第四章

    1.引言 上一章我们说明了执行IO操作的基本函数,其中的讨论是围绕普通文件IO进行的-打开文件,读文件或写文件.本章将描述文件系统的其他特征和文件的性质.我们将从stat函数开始,逐个说明stat结构 ...

  2. UNIX环境高级编程--第七章

    1进程终止 进程正常终止: view plaincopy to clipboard #include<stdlib.h>    void exit(int status);    void ...

  3. UNIX环境高级编程第三章

    1.对于内核,所有打开或者新创建的文件都通过文件描述符引用.open或者creat获得的文件描述符传递给read或者write做相关函数的第一参数. [1]open函数,除非创建新的函数带第三个参数, ...

  4. UNIX环境高级编程 第11章 线程

    使用C++调用pthread_cleanup_push( )时,下面的代码是无法编译通过的: pthread_cleanup_push(cleanup, "thread 1 first ha ...

  5. UNIX环境高级编程 第12章 线程控制

    c'nblogs 转载于:https://www.cnblogs.com/pluse/p/6889874.html

  6. unix环境高级编程基础知识之第二篇(3)

    看了unix环境高级编程第三章,把代码也都自己敲了一遍,另主要讲解了一些IO函数,read/write/fseek/fcntl:这里主要是c函数,比较容易,看多了就熟悉了.对fcntl函数讲解比较到位 ...

  7. 《UNIX 环境高级编程》学习笔记——UNIX 基础知识

    UNIX环境高级编程--UNIX 基础知识 引言 UNIX 体系结构 登录 文件和目录 输入和输出 程序和进程 出错处理 用户标识 信号 时间值 系统调用和库函数 引言 所有操作系统都为它们所允许的程 ...

  8. 《Unix环境高级编程》学习笔记:从点到面

    以前在课堂上学习过<Unix初级教程(第四版)>,对于Unix有了一点了解.由于以后使用的需要,要对它进行比较深入的学习,为此需要阅读不少的书籍,这本<Unix环境高级编程>便 ...

  9. [阅读体会] UNIX环境高级编程

    文章目录 写在开始阅读前 (我会的知识点,在体会里是不提的,并不是书中没有,这里着重于记录我之前不会的,但读过书之后学会的.) 第一章 第二章 2.1 引言 2.2 UNIX标准化 2.2.1 ISO ...

最新文章

  1. Javascript入门视频教程
  2. [NET] 如何从 Winform 移植到 Webform [自己搞定HTTP协议]
  3. Android:sqlite问题小结
  4. Mimir:通过AI向所有人提供视频服务
  5. Java:可选的可选实现
  6. 在java中原始时间_Java 日期时间
  7. python水印倾斜_python中图像特定位置的水印算法
  8. SAP License:中国集团管控存在的主要问题-已加入点评
  9. rosweb,roslib:bug汇总。报Warning: Invalid argument “/map“ passed to canTransform
  10. 21.策略模式(Strategy Pattern)
  11. 大数据应用需注意哪些安全问题
  12. tp6 使用workerman
  13. 计算机主机风扇声音大的原因,台式电脑风扇声音大怎么办?五个方法简单完美解决...
  14. 铁矿石大幅反弹,棉花认购大涨2倍,YP09继续探底2022.4.28
  15. 知识图谱基础入门(一)
  16. 2022苹果CMS 全新绿豆二开影视源码app源码完整版带安装教程
  17. 【转载】FPGA功耗的那些事儿
  18. 一、判别一个分解的无损连接性
  19. 如何选择CDN?你需要关注这三个方面
  20. C练题笔记之:Leetcode-658. 找到 K 个最接近的元素

热门文章

  1. CommonDialog
  2. Java动态代理例子 - 茶叶代理商
  3. 《重构-改善既有代码的设计》第二章
  4. 博海拾贝--springcloud的组件及使用(3)服务网关 GateWay
  5. HMM/GMM识别之三音素训练——决策树
  6. FL Studio步进音序器中的节奏怎么制作
  7. 山东大学软件学院2022-2023数据科学导论知识点整理【软工大数据课组】
  8. 毕业设计-基于微信小程序的教学评价系统
  9. SVN工程转Git工程Github托管
  10. ““ is not translated in “zh“ (Chinese) ……