首页 > 其他分享 >20201322陈俊池 学习笔记1

20201322陈俊池 学习笔记1

时间:2022-09-04 22:38:01浏览次数:77  
标签:文件 mysum make makefile 笔记 gdb 陈俊池 Linux 20201322

一、知识点归纳

第一章:引言

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

三、实践内容与截图

使用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

 

标签:文件,mysum,make,makefile,笔记,gdb,陈俊池,Linux,20201322
From: https://www.cnblogs.com/iris2333/p/16656343.html

相关文章

  • 笔记day06
    上周内容回顾后续项目中需要用到前端、后端、数据库三方面知识所以课程中涵盖了三方面内容MySQL基本操作基本SQL语句字段类型字段约束外键约束表查询......
  • 《Unix/Linux系统编程》第一、二章学习笔记
    第一章引言让我最有收获的内容:1.8关于UnixUnix是一种通用操作系统。开发者:肯·汤普森(KenThompson)和丹尼斯·里奇(DennisRichie)诞生日期:20世纪70年代早期经典书目......
  • 20201305学习笔记1
    第一章引言总述:在第一章刚开始这本书引入了Linux系统,告诉了我们Linux系统的发展历程和它的一些运行模式,他的版本,其中最主要讲的就是unbuntuLinux版本,讲了他的一些常用......
  • 《Unix/Linux系统编程》学习笔记1
    《Unix/Linux系统编程》学习笔记1第一章引言1、本书目标强化学生的编程背景知识:编程语言->编程开发动态数据结构应用:C结构、指针、链表、链树进程概念和进程管理并......
  • Mybatis学习笔记(三)——Mybatis执行sql的两种方式
    这部分内容前边简单提过了,之前写第一个Mybatis示例时用的就是第一种方式。本节主要介绍MyBatis执行SQL语句的两种方式和它们的区别。MyBatis有两种执行SQL语句的方......
  • 第一次读书笔记
    总结:第一二单元总的来说是在描述Linux系统中c语言的重要性,以及在其中的一些使用技巧。其中C语言数据结构中的数据结构,就是Linux文件系统构建起来的基础。第一章主要包含......
  • 学习笔记1
    一、学习笔记第一章1.Unix  Unix是20世纪70年代初出现的一个操作系统,除了作为网络操作系统之外,还可以作为单机操作系统使用。Unix作为一种开发平台和台式操作系统获......
  • 第一二章学习笔记
    第一章引言本章简单介绍了Unix的历史,包括贝尔实验室开发的Unix早期版本、AT&TSystemV以及Unix的其他版本,如BSD、HPUX、IBMAIX和Sun/SolarisUnix。此外,还介绍了Linux......
  • Unix/Linux系统编程学习笔记-1
    笔记第一章引言一、概述:在第一章引言里,简单介绍了Unix的历史,包括贝尔实验室开发的Unix早期版本、AT&TSystemV以及Unix的其他版本,如BSD、HPUX、IBMAIX和Sun/Solari......
  • 《Unix/Linux系统编程》第一、二章读书笔记
    自学教材1、2章学习笔记一、任务要求学教材第1,2章,提交学习笔记(10分)知识点归纳以及自己最有收获的内容(3分)问题与解决思路(2分)实践内容与截图,代码链接(3分)知识的结构......