第一、二章读书笔记

第一、二章读书笔记

第一章 引言

1.系统编程的作用

  • 使学生有效利用系统资源开发应用软件
  • 为学生打下专业基础

2.本书目标

  • 强化学生的编程背景知识
  • 了解动态数据结构的应用
  • 领会进程概念和进程管理
  • 学会并发编程
  • 学会使用定时器和定时功能
  • 了解信号、信号处理和进程间通信
  • 学会文件系统相关操作
  • 了解TCP/IP和网络编程

3.关于UNIX

  • Unix是一种通用操作系统,许多公司都开发过Unix操作系统,大多数Unix操作系统都是专有的,并且与特定的硬件平台相关联。

4.关于LINUX

  • Linux是一个类Unix系统,包含Unix系统的很多特性,可免费使用,易于安装。
  • 利用VirtualBox或VMware可在Windows主机中安装和运行Linux

5.使用LINUX

  • Linux启动程序:GRUB和LILO,或HD启动程序(Wang 2015)
  • Linux以单用户模式启动
  • 登录进程:三个文件流stdin(用于输入)、stdout(用于输出)、stderr(用于错误输出),之后等待用户登录
    -命令执行:cd(更改目录)、exit(退出)、logout(注销)等

6.使用Ubuntu LINUX

  1. 使用Cutrl+ALT+T可打开终端
  2. 要运行任何特权命令,用户必须输入sudo command
  3. 在当前目录下运行程序每次必需输入./a.out,方便起见在用户的主目录中创建一个包含 PATH=$PATH:./ 的.bashrc文件
  4. 在64位Linux下,使用 gcc -m32 t.c # compile t.c into 32-bit code 生成32位代码。
  5. Unix/Linux文件系统采用树形组织结构
  6. 文件类型:
  • 目录文件:一个目录可能包含其他的目录和(非目录)文件。

  • 非目录文件:

    • 常规文件:包含普通文本或包含可执行的二进制代码。
    • 特殊文件:特殊文件时/dev目录中的条目。
  • 符号链接文件:属于常规文件,其内容为其他文件的路径名。

  1. Linux命令:
  • ls:ls dirname:列出CWD或目录的内容
  • cd dirname:更改目录
  • pwd:打印CWD的绝对路径名
  • touch filename:更改文件名时间戳(如果文件不存在,则创建文件)
  • cat filename:显示文件内容
  • cp src dest:复制文件
  • mv src dest:移动或重命名文件。
  • mkdir dirname:创建目录
  • rmdir dirname:移除(空)目录
  • rm filename:移除或删除文件
  • ln oldfile newfile:在文件之间创建链接
  • find:搜索文件
  • grep:搜索文件中包含模式的行
  • ssh:登录到远程主机
  • gzip filename:将文件压缩为.gz文件。
  • gunzip file.gz:解压.gz文件
  • tar -zcvf file.tgz .:从当前目录创建压缩tar文件
    ...
  1. Linux手册页:
  2. 利用 sudo adduer username 添加新用户

第二章 编程背景

1.Linux中的文本编辑器

  • vim

    • 移动光标的命令键:h 左移一个字符 l:右移一个字符
      j:下移一个字符 k:上移一个字符
    • 插入模式:i:插入文本 a:追加文本 esc:退出
    • :w:写入(保存)文件。
    • :q:退出vim。
    • :wq:保存并退出。
  • VIAIWYG编辑器

    • Ctrl+c:中止或退出
    • Ctrl+k:删除行到缓冲区
    • Ctrl+Y:从缓冲区内容中复制或粘贴
    • Ctrl+S:保存已编辑文本
  • getdit

  • emacs
    ...

2.程序开发

  1. 程序开发步骤
    1. 创建源文件
    2. 用gcc把源文件转换成二进制可执行文件
    3. 链接
  2. 静态与动态链接
  • 创建二进制可执行文件的方式有两种:静态链接和动态链接分别使用静态库和共享库。动态链接所用的库称为动态链接库(DLL),在Linux中称为共享库(.so文件)
  1. 可执行文件格式
  • 二进制可执行平面文件
  • a.out可执行文件
  • ELF可执行文件
  1. a.out文件内容:文件头,代码段,数据段,符号表。
  2. 程序执行过程
    1. 读取a.out文件头,以确定所需的总内存大小,包含栈空间大小
    2. sh从总大小中分配一个内存区给执行映像
    3. sh放弃旧映像,开始执行新映像
    4. 执行从crt0.o开始,调用main()
  3. 程序终止

3.C语言中的函数调用

  • PC(IP):指向CPU要执行的下一条指令
  • SP(SP):指向栈顶
  • FP(BP):指向当前激活函数的栈帧
    -long jump:返回到调用序列中较早的某个函数

4.C语言中与汇编代码的链接

  1. 将c语言编译成汇编代码
  2. 用汇编语言实现函数
  3. 从汇编中调用C语言

5.链接库

在Linux中,有两种链接库:用于静态链接库和动态链接库。

  • 静态链接库的创建
  • 动态链接库的创建

6.makefile

  • make程序按照顺序读取makefile,它通过比较依赖项列表中源文件的时间戳来确定要构建哪些目标项。Makefile支持变量和后缀规则。

7.GDB调试工具

  • 使用步骤:
    1. 创建makefile:
      t: t.c
      gcc -g -o t t.c
      使用RMACS编辑c语言源文件。
    2. 编译源代码:打开菜单,选择编译或
      gccc -g -o t t.c
    3. 启动GDB
    4. 多窗口GDB:菜单中选择Gud-GDB-MI-Display Other Windows

8.C语言结构体、指针和链表操作

  • 定义c语言结构体时,每一个字段都必须具有一个编译器已知的类型
  • Unix文件系统的逻辑结构体是一个普通树,Linux文件系统也相同

9.Linux中的树

  • mkdir 路径名:为给定的路径名创建一个新目录
  • rmdir 路径名:如果目录为空,则删除该目录
  • pwd:打印当前工作目录的(绝对)路径名
  • creat 路径名:创建一个FILE结点
  • rm 路径名:删除FILE结点
  • save 文件名:将当前文件系统树保存为文件
  • reload 文件名:从一个文件构造一个文件系统树
  • menu:显示有效命令菜单
  • quit:保存文件系统树,然后终止程序
    ...
    总结体会

一二章的内容大多都是一些介绍Linux虚拟机的安装和基础用法,以及与之前所学过的c语言相关知识的对接,在阅读前两章的内容后,我对于Linux系统也有了一些初步的认识,并且在虚拟机上进行了一些尝试,感觉收获了很多知识。

原文地址:https://www.cnblogs.com/zhangwenying/p/15269439.html