学习笔记1

学习笔记1

第一章

  • 本书目标
    • 强化编程背景知识
    • 动态数据结构的应用
    • 进程概念和进程管理
    • 并发编程
    • 定时器和定时功能
    • 信号、信号处理和进程间的通信
    • 文件系统
    • TCP/IP和网络编程
  • 关于Unix
    • AT&T Unix
    • Berkeley Unix
    • HP Unix
    • IBM Unix
    • Sun Unix
  • 关于Linux
    • Debain Linux
    • Ubuntu Linux
    • Linux Mint
    • 基于RPM的Linux
    • Slackware Linux
  • 虚拟机上的Linux
    • VirtualBox
    • VMware
      • 我使用的虚拟机
    • 双启动Slackware和Ubuntu Linux
  • Unix/Linux文件系统组织
    • 文件类型
      • 目录文件
      • 非目录文件
        • 常规文件(REGULAR)
        • 特殊文件(SPECIAL)
          • 字符特殊文件:字符I/O,如/dev/tty0等。
          • 块特殊文件:块I/O,如/dev/had等。
          • 其他类型,如网络(套接字)特殊文件等。
      • 符号链接文件:属于常规文件,其内容为其他文件的路径名。例如:
        ln -s aVeryLongFileName myLink
    • Unix/Linux文件树
      • bin (普通用户命令)
      • boot (内核镜像)
      • dev (设备文件)
      • etc (系统维护文件)
      • home (用户主目录)
      • lib (链接库)
      • proc (系统信息相关的文件)
      • sbin (超级用户命令)
      • tmp
        • bin (命令)
        • include (头文件)
        • lib (库文件)
      • usr
        • local
        • man (用户手册)
        • X11 (X-Window)
    • 文件路径名
      • Unix/Linux文件树的根节点(符号‘/’)为根目录。
      • 以'/'为开头的路径名为绝对路径名,反之则为相对于进程当前工作目录
    • Unix/Linux命令
        ls:列出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文件
        tar -zxvf file.tgz:从.tgz文件中解压文件
        man:显示在线手册页
        zip file.zip filenames:将文件压缩成.zip文件
        - unzip file.zip:解压.zip文件
  • Ubuntu Linux系统管理
    • 用户账户
    • 添加新用户
    • sudo命令

第二章

  • Linux中的文本编辑器

    • vim
      • 命令模式:用于输入命令
        • vim启动时的默认模式
        • i:切换到插入模式,插入文本
        • a:切换到插入模式,追加文本
        • ':':进入末行模式
      • 插入模式:用于输入和编辑文本
      • 末行模式:用于保存文本和退出
    • gedit
    • emacs
      • 编写源文件
  • 程序开发

    • 程序开发步骤
      • 苏格拉底挑战


      • 创建源文件
      • 用gcc把源文件转换成二进制可执行文件
        • 把C源文件转化成汇编代码文件
        • 把汇编代码转化成目标代码
        • 链接
        • 苏格拉底挑战


    • 动态链接优点
      • 可减小每个a.out文件的大小
      • 许多执行程序可在内存中共享相同的库函数
      • 修改库函数不需要重新编译源文件
    • 可执行文件格式
      • 二进制可执行平面文件:仅包含可执行代码和初始化数据。
      • a.out可执行文件:传统的a.out文件包含文件头,然后就是代码段、数据段和bss段
      • ELF可执行文件:可执行的链接格式包含一个或多个程序段
    • a.out文件的内容
      • 文件头
        • tsize=代码段大小
        • dsize=包含初始化全局变量和初始化静态局部变量的数据段大小
        • bsize=包含未初始化全局变量和未初始化静态局部变量的bss段大小
        • total_size=加载的a.out文件的总大小
      • 代码段:也称正文段,包含程序的可执行代码
      • 数据段:数据段包含初始化全局变量和初始化静态数据
      • 符号段:可选,仅为运行调试所需
    • 程序执行过程
      • 读取a.out文件,以确定所需总内存大小
      • sh从总大小中分配一个内存区给执行映像
      • 然后sh放弃旧映像,开始执行新映像
      • 执行从crt0.o开始,调用main(),将argc和argv作为参数传给main()。
    • 程序终止
      • 正常终止
      • 异常终止
  • C语言中的函数调用

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

    • gcc生成的汇编代码
      • 入口代码
      • 函数体代码
      • 退出代码
  • 链接库

    • 静态链接库
      gcc -c mysum.c
      ar rcs libmylib.a mysum.o
      gcc -static t.c -L. -lmylib
      a.out
    • 动态链接库
      gcc -c -fPIC mysum.c
      gcc -shared -o libmylib.so my sum.o
      gcc t.c -L -lmylib
      export LD_LIBRARY_PATH=./
      a.out
  • makefile

    • makefile格式
      • 目标项
      • 依赖项
  • GDB调试工具

    • 在emacs IDE中使用GDB
      • 在X—Windows下,打开一个伪终端,使用emacs创建makefile
      • 编译源代码
      • 启动GDB
      • 多窗口GDB
        • Gud-t:用户命令和GDB消息的GDB缓冲区。
        • t.c:显示执行进度的程序源代码。
        • 栈帧:显示函数调用序列的栈帧。
        • 本地寄存区:显示当前执行函数中的局部变量。
        • 输入/输出
        • 断点:显示当前断点设置
      • 附加GDB命令 :
清除断点:
clear line#:清除 line#的断点。
clear name:清除函数(名字为name)中的断点。
更改变量值:
set vara=100:设变量a为100。
set varb=200:设变量b为200,以此类推
监视变量值改变:
watch c:监视变量c值改变:每当c的值变化时,将显示其旧值和新值
回溯追踪(bt):
btstackFrame#:回溯追踪栈顿。

遇到的问题

对gcc过程还不是很理解

解决过程

posted @ 2023-09-10 17:57  gaozheng08  阅读(3)  评论(0编辑  收藏  举报