zoukankan      html  css  js  c++  java
  • 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文件操作树
  • 相关阅读:
    PS3 可播放的多媒体类型
    VB个性化文件夹图标
    Delphi源码:编辑长求字符串相似度
    Delphi使用zlib来压缩文件
    汉字编码问题
    Silverlight 3 学习概要
    asp.net下大文件上传知识整理
    DHTML动态创建一个弹出遮罩层
    Delphi的运算符重载
    Windows Vista 交互式服务编程
  • 原文地址:https://www.cnblogs.com/BillGreen/p/15268359.html
Copyright © 2011-2022 走看看