ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

20201322 学习笔记1

2022-09-04 22:31:37  阅读:212  来源: 互联网

标签:文件 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语言编程

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

 

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

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

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

新建makefile文件  nano makefile 编辑

make编译   ./main1运行

运行成功

 

标签:文件,mysum,make,makefile,笔记,学习,gdb,Linux,20201322
来源: https://www.cnblogs.com/iris2333/p/16656343.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有