这章内容就是“provides a whirlwind tour of the UNIX System from a programmer's perspective”。

其实在看这章内容的时候,已经先看过了Chapter7~Chapter13,回头再看看这样的综述介绍。

1.2 UNIX Architecture

  主要就了解下面这张图即可:

  

  在一般UNIX operating system中谁在哪层来调用谁。

1.3 Logging In

  操作系统根据/etc/passwd中的信息来判断logging in信息是否匹配。

  每一行代表一个用户登录信息,举例:

  

  一般分为七个部分,用冒号分割:

    login name

    encrypted password

    numeric user ID

    numeric group ID

    a comment field(这个field在例子中为空)

    home directory

    shell programm

1.4 Files and Directories

  这个部分给出了第一份代码的例子。通过这个20行代码的例子,交代了不少东西:

    man命令怎么用

    头文件apue.h是干啥的

    错误处理函数err_sys和err_quit函数都是干啥的

    ...

  看了之后,给我的感觉是作者安排每个例子都是用心的,尤其在书一开始的地方都把一些书上之后常用的内容交代清楚,让人看的很明白。

1.5 Input and Output

  (1)File Descriptors定义(先记着,有个念想): "normally small non-negative integers that the kernel uses to identify the files accessed by a process. Whenever it opens an existing file or creates a new file, the kernel returns a file descriptor that we use when we want to read or write the file."

  (2)Standard Input , Standard Output & Standard Error

  (3)Unbuffered I/O:open read write lseek close都是,并且这些函数都跟file descriptors协作。看到这里对书上的例子瞬间产生了一个误解:不是说是unbuffered了么,怎么还有read(STDIN_FILENO, buf, BUFFSIZE)这样的形式呢?我没有看过后面的部分,但是猜测这里说的unbuffered是不用fflush刷新缓冲区的,具体的后面再看。

  (4)Standard I/O:就是提供了一个buffered的接口来调用各种unbuffered I/O函数,函数包含在头文件<stdio.h>中。

1.6 Programs and Processes

  (1)Program:磁盘上的可执行文件;执行的时候先读入内存,然后由kernel调用exec函数执行之。

  (2)Processes and Process ID:正在执行的program示例就叫process;unix系统的进程号非负整数

  (3)Process Control:fork ,exec, waitpid

  (4)Thread and Thread IDs

1.7 Error Handling

  (1)一般遇到error了,unix系统就返回一个负整数;不同的负整数标示不同类型的错误

  (2)<errno.h>头文件中有“symbol errno and constants for each value that errno can assume”,每个符号都以E开头;可以用man 3 errno来查看具体代表意思。

  (3)考虑到多线程的情况,是贡献进程中的address space的,每个线程要有独立的errno就需要其他的定义方法,如下图:

    

    具体参考的是/usr/includes/bits/errno.h头文件中的定义

  (4)strerror函数把错误变量映射到错误信息字符串;perror可以接受一个参数(一般是program的名),并将出错信息输出到standard error上。

  (5)error recovery。fatal error么有recovery action;nonfatal error有recovery action。跟资源相关的nonfatal error的recovery的策略分两种:一种是等;一种是重试。

  

1.8 User Identification

  

1.9 Sginals

  Signals are a technique used to notify a process that some condition has occurred

1.10 Time Values

  unix系统有两类不同的时间变量:

    (1)Calendar time:1970.1.1零点开始到现在的秒数

    (2)Process time:CPU time(在多线程那章的时候用到过

  注意相对时间和绝对时间;另外如果是多核的条件,时间统计时候与单核的情况可能不一样

1.11 System Calls and Library Functions

   具体可以参照1.2中的那张图理解。对于application的级别来说,即可以直接用system call也可以用libarary functions。

   书上举了一个内存分配的malloc(2)函数与sbrk(3)的例子。

【APUE】Chapter1 UNIX System Overview的更多相关文章

  1. 【APUE】Chapter10 Signals

    Signal主要分两大部分: A. 什么是Signal,有哪些Signal,都是干什么使的. B. 列举了非常多不正确(不可靠)的处理Signal的方式,以及怎么样设计来避免这些错误出现. 10.2 ...

  2. 【APUE】Chapter15 Interprocess Communication

    15.1 Introduction 这部分太多概念我不了解.只看懂了最后一段,进程间通信(IPC)内容被组织成了三个部分: (1)classical IPC : pipes, FIFOs, messa ...

  3. 【APUE】Chapter5 Standard I/O Library

    5.1 Introduction 这章介绍的standard I/O都是ISOC标准的.用这些standard I/O可以不用考虑一些buffer allocation.I/O optimal-siz ...

  4. 【APUE】Chapter3 File I/O

    这章主要讲了几类unbuffered I/O函数的用法和设计思路. 3.2 File Descriptors fd本质上是非负整数,当我们执行open或create的时候,kernel向进程返回一个f ...

  5. 【APUE】Chapter8 Process Control

    这章的内容比较多.按照小节序号来组织笔记的结构:再结合函数的示例带代码标注出来需要注意的地方. 下面的内容只是个人看书时思考内容的总结,并不能代替看书(毕竟APUE是一本大多数人公认的UNIX圣经). ...

  6. 【转载】loadrunner使用system()函数调用Tesseract-OCR识别验证码遇到的问题

    俗话说前人栽树,后人乘凉,此话一点不假,结合云层的一遍文章:http://bbs.51testing.com/thread-533920-1-1.html,知道还有一个Tesseract-OCR可以用 ...

  7. 【APUE】Chapter16 Network IPC: Sockets & makefile写法学习

    16.1 Introduction Chapter15讲的是同一个machine之间不同进程的通信,这一章内容是不同machine之间通过network通信,切入点是socket. 16.2 Sock ...

  8. 【APUE】Chapter4 File and Directories

    4.1 Introduction unix的文件.目录都被当成文件来看待(vi也可以编辑目录):我猜这样把一起内容都当成文件的原因是便于统一管理权限这类的内容 4.2 stat, fstat, fst ...

  9. 【APUE】Chapter17 Advanced IPC & sign extension & 结构体内存对齐

    17.1 Introduction 这一章主要讲了UNIX Domain Sockets这样的进程间通讯方式,并列举了具体的几个例子. 17.2 UNIX Domain Sockets 这是一种特殊s ...

随机推荐

  1. 记安卓appium自动化测试实践

    一.软件安装 1. 安装node.js,安装路径D:\Program Files\nodejs\ 可以在官网下载https://nodejs.org/zh-cn/download/,版本号为node- ...

  2. eclipce导出项目发布到tomcat

    1.右击项目-Except 2.在弹出框中输入“WAR file” 3.点击“next” 在Destinatin选择保存路径,即可 4.将保存的文件复制到tomcat下,启动tomcat之后,会自动解 ...

  3. HDU 1060 Leftmost Digit(求N^N的第一位数字 log10的巧妙使用)

    Leftmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  4. asp.net mvc Post上传文件大小限制 (转载)

    最近发现在项目中使用jQuery.form插件上传比较大的文件时,上传不了,于是改了下web.config的上传文件最大限制. <configuration> <system.web ...

  5. C#结构体和字节数组的转换函数

    在通信过程中,一般我们都会操作到字节数组.特别是希望在不同语言编程进行操作的时候. 虽然C#提供了序列化的支持,不用字节数组也行.但操作字节数组肯定会碰到.   一般都会采用结构来表示字节数组.但结构 ...

  6. JavaScript:改变 HTML 样式

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  7. vue webpack 懒加载

    自己项目中的写法 const router = new Router({ routes: [ { path: '/index', component: (resolve) => { requir ...

  8. 使用Python对MySQL数据库操作

    本文介绍Python3使用PyMySQL连接数据库,并实现简单的增删改查. 什么是PyMySQL? PyMySQL是Python3.x版本中用于连接MySQL服务器的一个库,Python2.x中则使用 ...

  9. CSS基础全荟

    一.CSS概述 1.css是什么?? 层叠样式表 2.css的引入方式 1.行内样式   在标签上加属性style="属性名1:属性值1;属性名2:属性值2;..." 2.内嵌式  ...

  10. Chrome浏览器调试移动端网页 chrome://inspect/#devices

    我使用的是魅族(魅蓝NOTE6 ),电脑是win 7系统,以下几步就可以轻松使用浏览器内置的功能调试移动端网页了: 注意:谷歌浏览器需要先FQ,不然调试页面会空白或者报404错误,(不会FQ的可以联系 ...