Linux学习第四天

这篇博客介绍了Linux学习的相关知识,包括编译的四个步骤、动态库与静态库的区别、gdb调试技巧,如设置参数、查看堆栈等。此外,还讲解了Makefile的作用和增量编译,以及文件操作,如ftell函数、文件权限和硬链接、软链接的区别。最后提到了在Linux下如何安装和配置YouCompleteMe这一C/C++的代码补全工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Review

1、编译的四个过程:预处理-》编译-》汇编-》链接

预编译: gcc-E test.c -o test.i

预编译头文件

编译:gcc -S -test.i -o test.s

将高级语言源程序编程汇编指令

汇编:as test.s -o test.o

将汇编指令变成机器指令

链接:gcc -o test test.o

将机器指令编程二进制可执行文件

 

2、动态库和静态库

(1)静态库:编译时被编入可执行程序,可执行程序执行时不依赖静态库

(2)动态库:编译时不会被编入可执行程序,只是做动态链接,可执行程序执行时依赖动态库

 

3、gdb

(1)gdb调试前,需要在编译时加入-g参数,命令为gcc -g main.c

(2)之后输入指令gdb a.out

(3)传递参数使用命令set args 3 4

(4)显示参数show args

(5)有一个数组名,看该数组的内存空间 x /20xb &arr

(6)进入一个函数 s

(7)从当前函数运行出来finish

(8)运行至断点c

(9)显示堆栈bt

(10)打临时断电tb

(11)查看断点信息 info b

(12)删除断点信息delete 3

(13)程序执行崩溃怎么办?使用core调试

4、①在Linux下执行程序一般是使用./[文件名]执行文件

 

二、Makefile工程管理器

目的:写出一个比较通用的Makefile

1、为什么使用Makefile工程管理器?便于对程序进行修改,因为现在大公司中的程序大多是使用的增量编译,这样可以知道应该再编译哪些文件。

2、写一个Makefile的例子

3、Makefile可以自动实现增量编译,是通过程序的修改时间实现的

4、执行命令make时,该命令会自动在当前目录下找Makefile文件

5、执行命令make clean后,该命令会在Makefile中寻找名为clean的文件并执行程序

6、确保Makefile编译出的程序可以清理,可以重新编译

7、自动变量:

8、同时编译出多个可执行二进制文件的目的?为了多个测试用例;可以同时编译出多个含有main函数的.c的文件

9、Makefile也可以自动生成,使用中间件可以实现

10、当要把多个.c文件编译成各自名字的可执行程序

 

 

三、文件操作

1、如何在头文件里封装、使用反斜杠\

2、ftell函数返回的是光标距离文件头部的值

3、不论什么设备,在Linux下,都把它当做普通文件去进行管理,在/dev文件加下,都可以看到对应的设备。

4、软链接:通过lln实现链接效果

5、如果使用fopen的W+模式创建文件,则默认创建的文件的权限是666;

Linux在编程中创建的文件可以指定权限。

与Windows不同,Linux下的文件读取方式有6种,而非Windows的12种

 

 

四、下午的内容-文件操作

1、如何将PATH永久添加内容?在Bashrc中增加一句话

2、遍历某一个目录的程序

#include<stdio.h>

#include<stdlib.h>

 

Int main(itn argc,char*argc[]){

ARGS_CHECK(args,2);

DIR*dir;

Dir=opendir(argc[1]);

ERROR_CHECK

 

Struct dirent *p;

While(p=readdir(dir))

{

      Printf("ino=%ld, lrn=%d  type=%d  filename=%s\n",p->d_ino,p->d_reclen.p->d_type,o->d_name)

}

Close(dir);

Return 0;

 

3、inode的值对应磁盘上的唯一数据,引用计数即为硬链接,

使用命令ln opendir.c opendir2.c,则可以创建一个硬链接。要注意硬链接和软链接的区别

删除引用了硬链接的文件,如果还有其他的引用文件,那么只是引用计数减一

 

4、另一个例子finddir

打开一个目录,之后打开该目录下的一个文件,如果该文件是目录,那么继续打开该目录下的目录下的文件,这是一个递归操作,因此可以写作深度优先遍历

 

#include<stdio.h>

#include<stdlib.h>

 

Void printDir(char *path,,int width){

DIR*dir;

Dir=opendir(argc[1]);

ERROR_CHECK;

 

Struct dirent *p;

Char buf[2014]={0};

 

While(p=readdir(dir))             //注意,遍历时对.和..不需要打开

{

If(strcpy(p->d_name,".")||strcpy(p->d_name.".."))

{

Continue;

}

 

Printf("%s\n",p->d_name);

Sprintf(buf,"%s%s%s",path,"/",p->d_name);

If(p->d_type==4)

{

printfDir

printDir(p->d_name);

}

 

}

Close(dir);

Return 0;

}

 

Int main(itn argc,char*argc[]){

ARGS_CHECK(args,2);

Puts(argv[1]);

printDir(argc[1]);

Return 0;

 

5、C语言是效率最高的高级语言

 

6、如何安装youcompleteme?

Ubuntu18.04安装好之后,进入系统

 

```shell

"开始安装"

 

一、基本安装

 

" ifconfig使用"

$ sudo apt install net-tools

 

 

$ sudo apt install ssh

 

$ sudo apt install vim

$ sudo apt install git  

 

"C/C++编译工具链"

$ sudo apt install gcc

 

二、vim插件安装

 

"安装vim-plug"

$ sudo apt install curl

$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \

    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

 

在.vimrc中增加以下内容

call plug#begin('~/.vim/plugged')

Plug 'Valloric/YouCompleteMe', { 'do': './install.py --clang-completer',  'for': ['c', 'cpp'] }

call plug#end()

 

$ vim "进入到vim页面,在命令行模式之下执行

:PlugInstall

   

"为界面美化下载的字体"

$ sudo apt-get install fonts-powerline

 

"安装YCM"

 

$ sudo apt install build-essential cmake python3-dev

$ sudo apt install clang libclang-dev

$ cd ~/.vim/plugged/YouCompleteMe

$ python3 install.py --clang-completer

 

使用默认配置

在.vimrc中添加

let g:ycm_global_ycm_extra_conf='~/.vim/plugged/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py'

 

 

-----------------------

针对18.04的快捷方法

sudo apt install gcc

sudo apt install vim-youcompleteme

vim-addons install youcompleteme

视频:

第五个:

1、首先,使用哪一条指令,要先把实现该指令需要的头文件放到引用的头文件中,例如使用fopen函数,需要将该函数依赖的头文件fcntl.h放到之前定义好的头文件func.h中

 

 2、使用fopen函数时,需要的参数有open(pathname,权限,mode)

对于位权限,如果想实现两种权限,那么应该将这两种权限对应的位码进行或操作

 

3、mmap的功能,不需要读写,也可以改变文件内容,采用的就是磁盘内存映射机制,把磁盘映射到内存里

DMA技术:使数据不经过CPU,直接从磁盘到内存

mmap的一个缺点是,它不能改变文件大小,因为他采用的是映射的原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值