《Unix/Linux系统编程》第1、2章学习笔记

第一章 引言

系统编程

系统编程是计算机科学和计算机工程教育不可或缺的一部分,对学习操作系统、嵌入式系统、数据库系统、数据挖掘、人工智能等方面有着重要的作用。

本书目标

  • 强化编程背景知识
    • 详细介绍了程序开发步骤,包括汇报器、编译器、链接器等。
  • 动态数据结构的应用
    • 字符串标记化、搜索树节点、插入和删除树节点等。
  • 进程概念和进程管理
    • fork()、exit()、wait()等
  • 并发编程
    • Pthreads 编程、线程连接、互斥量等
  • 定时器和定时功能
  • 信号、信号处理和进程间通信
  • 文件系统
    • 存储设备、Unix\Linux内核中的文件系统支持、文件操作的系统调用、库I/O函数等。
  • TCP/IP和网络编程
    • TCP\IP协议、套接字API、UDP和TCP套接字编程,以及网络计算中的服务器-客户机模型。

Unix

  • AT&T Unix
  • Berkeley Unix
  • HP Unix
  • IBM Unix
  • Sun Unix

Linux

  • Debian Linux
  • Ubuntu Linux
  • Linux Mint
  • 基于RPM的Linux
  • Slackware Linux

VirtualBox 安装Ubuntu

  1. 下载VirtualBox(http://download.virtualbox.org
  2. 安装VirtualBox
  3. 创建VirtualBox虚拟机
  4. 下载Ubuntu
  5. 安装Ubuntu

使用Ubuntu Linux

  • Linux内核映像
    • Linux内核映像位于/boot目录中,一个可启动的Linux内核映像由三部分组成: |BOOT|SETUP|linux kernel|
  • Linux启动程序
    • 最受欢迎的有GRUB和LILO。
  • Linux启动
    1. 加载BOOT+SETUP至实模式内存的0x90000处
    2. 加载Linux内核至高端内存的1MB处
  • Linux运行级别
    • Linux内核以单用户模式启动,以多用户模式运行。
  • 登录进程
    • 三个文件流stdin、stdout、stderr,等待用户登录。
  • 命令执行
    • 执行命令解释程序sh,后者将提示用户执行命令。

Unix/Linux文件系统组织

  • Unix/Linux文件系统采用树形组织结构
  • 文件类型
    • 目录文件
    • 非目录文件
      • 常规文件
      • 特殊文件
        • 字符特殊文件
        • 块特殊文件
        • 其他类型
      • 符号链接文件
  • 文件路径名
    • 根目录
    • 当前工作目录

Unix/Linux命令

Unix/Linux 系统管理

  • 用户账户
  • 添加新用户
    • sudo adduer username

第二章 编程背景

文本编辑器

  • vim
    • 命令模式
    • 插入模式
    • 末行模式
  • gedit
  • emacs

程序开发

  • 创建源文件
  • 用gcc把源文件转换成二进制可执行文件
  • 静态与动态链接库
  • 可执行文件格式
    • 二进制可执行平面文件
    • a.out 可执行文件
    • ELF可执行文件
  • a.out文件
    • 文件头
      • tsize、dsize、bsize、total_size
    • 代码段
    • 数据段
    • 符号表
  • 程序执行过程
    1. 读取a.out文件头,以确定所需的总内存大小。
    2. sh从总大小中分配一个内存区给执行映像。
    3. sh放弃放弃旧映像,开始执行新映像。
    4. 执行从crt0.o开始,调用main()。
  • 程序终止
    • 正常终止
    • 异常终止

C语言程序与汇编代码的链接

  • 用汇编代码编程
    1. 将C代码编译成汇编代码
    2. 汇编代码说明
  • 用汇编语言实现函数
  • 从汇编中调用C函数

链接库

  • 动态链接库
  • 静态链接库

makefile

  • make工具是一个程序,它按照顺序读取makefile,以自动有选择的执行编译链接。
    • 一个make文件由一系列目标项依赖项规则组成
  • 当make程序读取makefile时,通过比较依赖项列表中源文件的时间戳来确定要构建哪些目标项

GDB调试工具

  • GDB调试工具是一个交互式调试工具,可以调试用C、C++和其他几种语言编写的程序。
  • GDB是一个功能强大的调试工具,使用非常简单,但应该注意,所有调试工具只能提供有限的帮助,在某些情况下用处不大,所以程序开发的最佳方法是仔细设计程序的算法,然后根据算法编写程序代码。

C语言结构体

  • 结构体和指针
  • 类型转换
  • 链表
  • 树和二叉树
posted @ 2021-09-13 22:34  20191302董佳帅  阅读(71)  评论(0编辑  收藏  举报
/* 看板娘 */