Unix/Linix系统编程第二章学习笔记

Unix/Linix系统编程第二章学习笔记

作者:20191322wyl

Linux中的文本编辑器

vim

vim有三种模式,分别是:

  • 命令模式:用于输入命令
  • 插入模式:用于输入和编辑文本
  • 末行模式:用于保存文件并退出

vim启动时,处于默认的命令模式,此时移动光标的命令键如下:(也可使用箭头键来控制)

h:将光变向左移动一个字符
l:光标向右移动一个字符
j:将光标向下移动一行
k:将光标向上移动一行
  • (联想记忆:类似于wasd按键,平时玩游戏的上下左右,只需把k的位置联想到上面“w”的位置就行

用户可以通过输入“i”或“a”将vim切换到插入模式

i:切换到插入模式,插入文本
a:切换到插入模式,追加文本

在命令模式下输入“:”进入末行模式

:w  写入(保存)文件
:q  退出vim
:wq 保存并退出
:q! 不保存并退出

gedit

gedit是GNOME桌面默认环境的文本编辑器

emacs

emacs支持关键词搜索

使用文本编辑器

emacs

  • emacs菜单

  • emacs提供了一个集成开发环境,可以编译,运行,调试程序

程序开发

程序开发步骤

  1. 创建源文件

  2. 用gcc把源文件转换成二进制可执行文件

    此操作主要包含三个步骤

    • 将c源文件转换为汇编代码文件。即.c到.s
    • 把汇编代码转换成目标代码。即.s 到 .o
    • 链接,j将.o文件和必要的库函数组成单一的二进制可执行文件

静态与动态链接

动态链接库(DLL)

共享库(.so 文件)

可执行文件格式

  1. 二进制可执行平面文件
  2. a.out可执行文件
  3. ELF可执行文件:linux系统中默认的二进制可执行文件

a.out文件的内容

  1. 文件头

    tsize = 代码段大小
    dsize = 包含初始化全局变量和初始化静态局部变量的数据段的大小
    bsize = 包含未初始化全局变量和未初始化静态局部变量的bss段的大小
    total_size = 加载的a.out文件的总大小
    
  2. 代码段

  3. 数据段

  4. 符号表

程序执行过程

  1. 读取a.out文件头
  2. sh从总大小中分配一个内存区给执行映像
  3. sh放弃旧映像,执行新映像
  4. 执行从crt0.o开始,调用main(),将argc和argv作为参数传递给main()

程序终止

  • 正常终止
  • 异常终止

C语言中的函数调用

ctr0.o --> main() --> A(par_a) --> B(par_b) --> C(par_c)

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

用汇编代码编程

  • 将c代码编译成汇编代码
  • 汇编代码说明

用汇编语言实现函数

从汇编中调用c函数

链接库

静态链接库

动态链接库

makefile

一个makefile文件由一系列目标项依赖项、和规则组成

当make程序读取makefile时,它通过比较依赖项列表中源文件的时间戳来确定要构建哪些目标项。如果任何依赖项在上次构建后有较新的时间戳,make将执行与目标有关的规则

GDB调试工具

  • GDB是一个交互式调试工具,可以调用C、C++和其他几种语言编写的程序
  • 在linux系统中,man gdb命令显示gdb的手册页,其中提供了如何使用GDB的简要说明
  • GDB是一个功能强大的调试工具,使用非常简单

C语言结构体

  • 定义C语言结构体时,该结构体的每个字段都必须具有一个编译器已经的类型,但自引用指针除外
  • 每个C语言结构体数据对象都分配了一个连续内存块
  • 一个结构体的大小可以由sizeo(struct type)确定
  • C语言联合体与结构体类似,定义联合体时只需将struct替换成关键字union

链表、树

链表

  • 链表操作
  • 链表遍历
  • 搜索链表
  • 插入操作
  • 优先级队列
  • 删除操作
  • 循环链表
  • 双向链表

  • 二叉搜索树
  • 二叉树遍历算法
  • 深度优先遍历算法
  • 广度优先遍历算法
  • Unix/Linux文件操作树
posted @ 2021-09-14 16:48  20191322  阅读(100)  评论(0编辑  收藏  举报