• 20201322陈俊池 学习笔记1


    一、知识点归纳

    第一章:引言

    1.3本书目标

    (1)强化学生的编程背景知识

    (2)动态数据结构的作用

    (3)进程概念和进程管理

    (4)并发编程

    (5)定时器和定时功能

    (6)信号、信号处理和进程间通信

    (7)文件系统

    (8)TCP/IP和网络编程

    1.13使用Linux

    Linux内核位置:/boot Linux内核映像的三部分:BOOT|SETUP|linux kernel Linux登录进程的三个文件流:stdin、stdout和stderr

    Linux命令执行:登录后,用户进程通常会执行命令解释程序sh,后者将提示用户执行命令。sh将直接执行一些特殊命令,如cd、exit)、logout。

    1.15Unix/Linux文件系统组织

     

    1.15.3 Unix/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文件。

    • tar -zcvf file.tgz.:从当前目录创建压缩tar文件。

    • tar -zxvf file.tgz.:从.tgz文件中解压文件。

    • man:显示在线手册页。

    • zip file.zip filenames:将文件压缩为.zip文件。

    • unzip file.zip:解压.zip文件。

      1.16 Ubuntu Linux 系统管理

      1.16.1 用户账户

      与在Linux中一样,用户账户信息保存在/etc/passwd文件中,该文件归超级用户所有,但任何人都可以读取。

      1.16.2 添加新用户

      我们可以假设:用户想添加一名家庭成员,以便使用同一台计算机。与在Linux中一样,Ubuntu支持“adduser”(添加用户)命令,运行方式如下:

      sudo adduser username 新用户可通过选择新用户名来登录系统。

      1.16.3 sudo命令

      出于安全原因,Ubuntu禁用了超级用户账户,这可防止任何人以根用户身份登录()。sudo(“超级用户执行”)允许用户提升到超级用户特权级别。完成命令执行后,用户进程将恢复到原来的特权级别。

    第二章 编程背景

    2.1 Linux中的文本编辑器

    Linux中,文件编辑、文本编辑是必不可少的基本操作。首先学习vim,即使用命令行进行文本编辑,若熟练掌握其中的命令,就可以很快完成。gedit:类似于Windows中的记事本,是一个简单的图形界面文本编辑器。emacs:更加强大,具有更多功能的图形界面文本编辑器。

    2.1.1 vim

    vim有3种不同的操作模式,分别是

    • 命令模式:用于输入命令

    • 插入模式:用于输入和编辑文本。

    • 末行模式:用于保存文件并退出。

    vim启动时,处于默认的命令模式

    移动光标的命令键示例如下:

    h:将光标向左移动一个字符

    l:将光标向右移动一个字符

    j:将光标向下移动一个字符

    k:将光标向上移动一个字符

    要输入文本进行编辑,用户必须输入i(插入)或a(追加)命令将vim切换到插入模式:

    :w:写入(保存)文件。

    :q:退出vim。

    :wq:保存并退出。

    要退出插入模式,请按ESC键一次或多次。在命令模式下,输入“:”进入末行模式,将文本保存为文件或退出vim。

    2.7.1 makefile格式

    一个make文件由一系列目标项、依赖项和规则组成。目标项通常是要创建或更新的文件,但它也可能是make程序要引用的指令或标签。目标项依赖于一系列源文件、目标文件甚至其他目标项,具体描述键依赖项列表。规则是使用依赖项列表构建目标项所需的命令。

    例子:

    一个C程序,三个源文件:type.h、mysum.c、t.c 使用gcc编译: gcc -o a.out main.c mysum.c 使用makefile:有一个名为Makefile的文件:

    myt:type.h t.c mysum.c    #依赖列表
    gcc -o myt t.c mysum.c     #rule命令,make时执行。

    2.7.2 make程序

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

    1. type.h file: // 头文件

      int mysum(int x, int y) // types, constants,etc

    2. mysum.c file // C语言中的函数

    #include <stdio.h>
    #include "type.h"
    int mysum(int x, int y)
    {
      return x+y;
    }

    t.c file:

    #include <stdio.h>
    #include "type.h"
    int main()
    {
      int sum = mysum(123,456);
      printf("sum = %d\n", sum);
    }

    通常,我们会使用sh命令

    gcc -o myt main.c mysum.c

    生成一个名为myt的二进制可执行文件。下面我们将使用makefile演示C语言程序设计的编译链接。

    2.7.3 makefile示例

    示例2.5:makefile。 (1)创建名为mk1的makefile,包括:

    myt:type.h t.c mysum.c     # target: dependency list
      gcc -o myt t.c mysum.c # rule: line MUST begin with a TAB

    在本示例中,生成的可执行文件名myt通常与目标项名称匹配。这允许make通过将目标项时间戳与依赖项列表中的时间戳进行比较,来决定稍后是否再次构建目标项。 (2)使用mk1作为makefile运行make:make通常使用默认的makefile或Makefile,即当前目录中出现的makefile。它可以通过-f标志直接使用另一个makefile,如:

    make -f mk1

    make将构建目标文件myt,并将命令执行显示为:

    gcc -o myt t.c mysum.c

    (3)再次运行make命令,将会显示消息:

    make:'myt' is up to date

    在这种情况下,make不会再次构建目标,因为在上次构建后没有任何文件更改。

    (4)相反,如果依赖项列表中的任何文件有更改,make将再次执行rule命令。一种简单的文件修改方法是使用touch命令,修改文件的时间戳。那么,如果我们输入sh命令:

    touch type.h // or touch *.h, touch *.c, etc.

    make -f mk1

    make将重新编译链接源文件,以生成新的myt文件。 (5)如果我们从依赖项列表中删除一些文件名,即使这些文件有更改,make也不会执行rule命令。读者可以尝试自行验证。 可以看出,mk1是一个非常简单的makefile,它与sh命令的差别不大。但是,我们可以改进makefile,使之更加灵活和通用。

    makefile 变量:makefile支持变量。在makefile中,%是一个与sh中的*类似的通配符变量。makefile还可以包含自动变量,这些变量在匹配规则后由make设置。自动变量规定了对目标和依赖项列表中元素的访问,从而用户不必显示指定任何文件名。自动变量对于定义一般模式规则非常有用。以下列出了make的一些自动变量。

    • $@:当前目标名

    • $<:第一个依赖项名

    • $^:所有依赖项名

    • $*:不包含扩展名的当前依赖项名

    • $?:比当前目标更新的依赖项列表

    2.8 GDB调试工具

    gdb断点设置指令总结:

    (gdb)break 7 //以行号设置断点
    (gdb)break function_name //以函数名设置断点
    (gdb)clear 行号 //删除这行的断点
    (gdb)clear 函数名 //删除该函数的断点
    (gdb)delete breakpoints n //删除第n次(指定编号)设置的断点
    (gdb)clear //删除程序中所有的基于行设置的断点
    (gdb)delete //删除程序中所有的断点
    (gdb)r //执行程序
    (gdb)n //单步调试
    (gdb)c //执行到下一个断点
    (gdb)print 变量或表达式 //打印变量或表达式当前的值。
    (gdb)print 变量=值 //对变量进行赋值
    (gdb)whatis 变量或表达式 //显示变量类型
    (gdb)set variable 变量=值 //变量赋值

    二、问题与解决思路

    问题:安装ubuntu后,虚拟机黑屏。

    网上查询后,发现是由于显卡驱动问题导致,安装好显卡驱动后成功。

    解决办法:

    1. 选择相应内核的“recovery model”

    2. 进去系统之后编辑'''/etc/default/grub''' 这个文档

    sudo gedit /etc/default/grub

    3.找到这一行:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    修改为:
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"

    4.更新GRUB:

    sudo update-grub

    5.存档,并重启。

    参考:https://zhuanlan.zhihu.com/p/436853550

    三、实践内容与截图

    1.使用ubuntu进行简单的c语言编程

    参考:https://blog.csdn.net/guyuewangyue/article/details/108785826

    使用vim创建c语言文件 vim hello.c

    输入i切换到插入模式编辑代码 编辑完后输入":"进入末行模式,输入:wq退出并保存

    程序实现了输出“hello linux”   进行简单的乘法 结果6.000000

    2.使用makefile进行简单c语言编程

    新建makefile文件  nano makefile 编辑

    make编译   ./main1运行

    运行成功 可以看到结果6.000000

  • 相关阅读:
    RedHat Openshift 搭建个人博客(wordpress)指南
    Sokcet方式请求HTTP/HTTPS的封装类HttpHelper
    不花钱的主机
    关于IE、火狐等浏览器兼容问题的总结
    ios平台调用WCF
    Windows Writer的服务提供器
    QQ开放平台 OAUTH2.0 QqConnetSDK 登录,运行原理,附源码。
    Learning Cocos2dx for XNA——深入剖析Hello World
    Albacore.NET下基于Rake(ruby make)的自动化构建工具
    排序算法
  • 原文地址:https://www.cnblogs.com/iris2333/p/16656343.html
Copyright © 2020-2023  润新知