【UNIX环境高级编程】UNIX基础知识

1.UNIX体系结构

从严格意义上,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境,我们称这种软件为内核

内核的接口称为系统调用。公用函数库构建在系统调用接口之上,应用软件既可使用公用数据库,也可使用系统调用。shell是一种特殊的应用程序,它为运行其他应用程序提供一个接口。

广义上,操作系统包括内核和一些其他软件。这些软件包括系统实用程序、应用软件、shell以及公用函数库。

2.shell

shell是一个命令行解释器,它读取用户输入,然后执行命令。用户通过用终端(交互式shell),有时通过文件(称为shell脚本,shell script)向shell进行输入。

3.文件和目录

3.1文件系统

UNIX文件系统是目录和文件组成的一个层次结构,目录的起点称为,其名字是一个字符\。目录是一个包含许多目录项的文件,在逻辑上,认为每个目录项都包含一个文件名,同时还包含说明文件属性的信息。

3.2 文件名

目录中的各个名字称为文件名。

创建新目录时回自动创建两个文件名:.(点)和..(点-点) 点指当前目录,点-点指父目录

3.3 路径名

一个或多个以斜线分隔的文件名序列构成路径名

绝对路径:是从盘符开始的路径,形如C:\windows\system32\cmd.exe

相对路径:是从当前路径开始的路径,假如当前路径为C:\windows要描述上述路径,只需输入system32\cmd.exe

3.4 工作目录

每个进程都有一个工作目录,有时称其为当前工作目录。所有相对路径名都从工作目录开始。进程可以用chdir函数更改工作目录。

4.程序和进程

4.1 程序

程序是存放在磁盘上,处于某个目录中的一个可执行文件。使用6个exec函数中的一个由内核将程序读入存储器,并使其执行。

4.2 进程和进程ID

程序的执行实例称为进程,某些操作系统用任务表示正被执行的程序。UNIX系统确保每个进程都有一个唯一的数字标识符,称为进程ID。

4.3 进程控制

进程控制的主要函数:

fork、exec和waitpid

4.4 线程和线程ID

一个进程只有一个控制线程,同一时刻只执行一组机器指令。对于某些问题,不同部分使用一个控制线程,可使问题简化。

在一个进程内的所有线程共享同一地址空间、文件描述符、栈以及与进程相关的属性。因为他们能访问同一存储区,所有各线程在访问共享数据时需要采取同步措施以避免不一致性。

每个线程都有线程ID,它只在所属进程内作用

5.出错处理

当UNIX函数出错时,常返回一个负值,整型变量errno通常被设置为含有附加信息的一个值。

c标准定义了两个函数打印出错信息。

#include<string.h>
char *strerror(int errnum);//返回值:指向信息字符串的指针
char *strerror(int errnum);//返回值:指向信息字符串的指针

此函数将errnum(它通常就是errno值)映射为一个出错信息字符串,并返回此字符串的指针

perror函数基于errno的当前值,在标准出错上产生一个出错信息,然后返回。

#include<stdio.h>
void perror(const char *msg);
void perror(const char *msg);

首先输出由msg指向的字符串,然后是一个冒号,一个空格,接着是对应于errno值得出错信息,最后是一个换行符

6.信号

信号是通知进程已发生某些情况得一种技术。

进程如何处理信号三种选择

  • 忽略该信号,有些信号表示硬件异常

  • 按系统默认方式处理,对于除以0得情况,系统默认是终止进程

  • 提供一个函数pause,信号发生时则调用该函数捕捉信号。

产生信号方式:

  • 中断键(Delete或Ctrl+c)和退出键(Ctrl+\)

  • 调用kill的函数

7.时间值

UNIX系统一直使用两种不同时间值:

(1)日历时间,国际标准时间,系统基本数据类型time_t用于保存这种时间值

(2)进程时间,也称cpu时间,用以度量使用的中央处理机资源。系统基本数据类型clock_t用于保存这种时间值。

UNIX系统使用的三个进程时间值:

  • 时钟时间,又称墙上时钟时间,他是进程运行的时间总量,其值与系统中同时运行的进程数有关。

  • 用户CPU时间,执行用户指令所用的时间

  • 系统CPU时间,该进程执行内核程序所经历的时间。每当一个进程执行一个系统服务,如read或write,则在内核内执行该服务所花费的时间就计入该进程的系统CPU时间

8.系统调用和库函数

系统调用

所有的操作系统都提供多种服务的入口点,程序由此向内核请求服务。各种版本的UNIX实现都提供定义明确、数量有限、可直接进入内核的入口点,这些入口点称为系统调用

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

进程控制系统调用(fork、exec和wait)通常由用户应用程序直接调用。

【UNIX环境高级编程】UNIX基础知识相关推荐

  1. 5w字总结 Unix系统编程学习笔记(面试向)(Unix环境高级编程/Unix环境程序设计)

    文章目录 一.计算 C语言的数据表示与处理 计算 C语言的基本运算操作 内存表和符号表 类型转换 函数类型的分析 指令 复合指令 句法 函数 函数激活(Activation Record) 函数激活定 ...

  2. UNIX环境高级编程 - UNIX基础知识

    所有操作系统都为运行在它之上的程序提供各种服务,典型的服务包括:执行新程序.打开文件.读写文件.分配存储空间.提供时间等. UNIX体系结构 严格来说,操作系统是一种软件,它控制计算机硬件资源,提供程 ...

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

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

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

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

  5. unix环境高级编程 pdf_UNIX系统编程宝典,每一本都值得程序员珍藏

    这几本UNIX系统编程宝典,重印无数次,几代程序员都视如珍宝的几本书,小编在出版圈里快十年了,见证了这本书图灵版.异步社区版的出版.营销,对这套书倾注了一定的感情.今天继续分享给你们,好书总会有人还不 ...

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

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

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

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

  8. Unix环境高级编程 笔记

    Unix环境高级编程(第二版)学习笔记 这是一次较长时间的整理,然而跳跃了一些章节和很多知识点,仍然是很不完善很不全面的. 前言 操作系统某些问题 严格意义上,可将操作系统定义为一种软件,它控制计算机 ...

  9. 《UNIX环境高级编程(第3版)》

    <UNIX环境高级编程(第3版)> 基本信息 原书名:Advanced Programming in the UNIX Environment (3rd Edition) (Addison ...

  10. unix环境高级编程(上)-文件篇

    目录 前言 unix基础知识 unix标准化和实现 unix提供的文件IO 文件和目录 标准IO 系统数据文件 前言 笔者将<unix环境高级编程>主要内容总结为三篇:文件篇,进程篇,高级 ...

最新文章

  1. 如何和女生聊天不进入友谊区
  2. 数据仓库/集市 星形/雪花形 事实/维度表
  3. [JMX一步步来] 7、用JDK5.0的JConsole来连接MBean
  4. 优秀学生专栏——孙珩发
  5. javaweb开发的准备工作——配置篇
  6. 计算机科学与技术专业实习招聘,中科院研究生院招聘GIS或计算机专业实习生
  7. 深入php面向对象和模式
  8. 《C和指针》——字符串操作补、字符串内存操作
  9. 基于用户的协同过滤算法
  10. SQL Server数据挖掘–如何将数据转化为有价值的信息
  11. 第九届河南理工大学算法程序设计大赛 正式赛(部分题解)
  12. 创设Excel服务失败
  13. 投票系统C语言程序,C语言课程投票程序系统.doc
  14. 目标检测经典论文——YOLOv1论文翻译(纯中文版):YOLO:统一的实时目标检测
  15. 基于特征提取的迁移学习
  16. 【Python界面设计】Tkinter的Listbox控件
  17. python可视化库matplotlib_Python可视化库matplotlib(基础整理)
  18. Swift语法学习--数组
  19. 《未来简史》一、主导世界力量的形成与崩塌
  20. 每次都想呼喊你的名字

热门文章

  1. 收藏夹吃灰系列(五):解决Win10插入U盘不显示磁盘可用容量且打不开卡死问题 | 超级详细,建议收藏
  2. python暴力破解
  3. mapxtreme java_MapXtreme Java
  4. 大厂面经----接近30场面试分享
  5. 【VMware vSAN 7.0】5.4.2 创建 vSAN 集群—我们有软硬件解决方案
  6. 使用requests访问必应在线翻译
  7. WEB前端使用SheetJS读写excel文件
  8. Java 并发编程实战 -- 常见概念
  9. 廖雪峰python3复习总结——day2-1
  10. 汇川PLC软件下载及安装