Linux复习
复习之前学过的知识 并记录,备战秋招
知报
这个作者很懒,什么都没留下…
展开
-
进程管理中vfork函数
vfork函数的调用和返回值与fork函数的相同,但是两者的功能有所不同。1.fork创建的子进程会复制其父进程的数据段和堆栈段;vfork的父进程共享数据段。2.vfork并不会把父进程的地址空间完全复制给子进程,因为子进程会立刻调用exec或者exit,也就不会访问该地址空间,只在子进程调用exec之前,在父进程空间中运行。3.vfork函数保证子进程先运行,在它调用exec或者exit之后父进程才可以调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步操作,将会导致死锁。vfork函数原创 2020-08-10 23:51:40 · 261 阅读 · 1 评论 -
进程等待函数(waitpid)
waitpid函数原型如下:pid_t waitpid(pid_t pid , int *status , int options)与wait函数相比,系统调用二者的作用是完全相同的,但是waitpid多出了两个可由用户控制的参数pid和options。pid:从参数的名字上可以看出来这是一个进程的ID。但是这里pid的值不同时,会有不同的意义。1.pid > 0时,只等待进程ID等于pid的子进程,只要该子进程不结束,就会一直等待下去;2.pid = -1时,等待任何一个子进程的退出,此时原创 2020-08-10 03:30:50 · 9080 阅读 · 1 评论 -
进程等待函数(wait)
函数原型:int wait(int* statloc);作用:进程一旦调用了wait,就会立刻阻塞自己,由wait分析当前进程中的某个子进程是否已经退出了,如果让它找到这样一个已经变成僵尸进程的子进程,wait会收集这个子进程的信息,并将它彻底销毁后返回;如果没有找到这样一个子进程,wait会一直阻塞直到有一个出现。参数statloc用来保存被收集进程退出时的一些状态,它是一个指向int型的指针。但如果对这个子进程是如何死掉的不在乎,咱们可以将它设置为NULL:pid = wait(NULL);如果成原创 2020-08-09 23:12:48 · 2603 阅读 · 0 评论 -
make命令与Makefile文件简介
Make工程管理,就是管理工程项目中的几个文件。大家在平时的练习中,编译的文件个数一般不超过五个,即使有几个文件进行了更改,也只需要对其重新编译即可。但是工程若由成百上千个文件组成,而只有其中个别文件进行了修改,如果此时不知道哪几个文件被更改了,就只能用gcc把所有的文件重新编译一遍,这样大大降低了效率。所以Make工程管理器便应运而生了,它可以自动识别更新了的文件代码,只对更新的文件进行编译。这里的自动指的是能够根据文件时间戳自动发现哪个文件更新过。make工程管理器主要是通过一个叫Makefile的原创 2020-07-05 01:50:40 · 245 阅读 · 0 评论 -
Linux复习之静态库与动态库的区别
静态库在程序编译时会被链接到目标文件中,程序运行时不需要该库。缺点是编译后文件较大,但是隔离性好。动态库在编译时不会被链接到目标代码中,在程序运行时才被载入,所以程序运行时需要动态库存在。优点是编译后文件较小,多个应用程序可以使用同一个动态库,启动多个程序时,只需要将动态库加载到内存一次。通过之前的学习可以发现,在生成可执行文件时,无论使用动态库还是静态库,gcc命令的格式都是相同的,gcc main.c 库名。这时候生成的a.out文件并不能区别是静态库还是动态库。所以需要记住,当静态库和动态库同处于一原创 2020-07-02 02:34:01 · 216 阅读 · 0 评论 -
Linux复习之动态库的建立与使用
动态库又被称作共享库,编译时链接动态库,但是不加载目标代码,只有在运行时才加载相关的目标代码到内存,进程结束时自动释放所占内存。动态库的建立还是以排序函数sort.c与bank.h为例:1.编辑sort.c与bank.h文件2.生成sort.o文件指令:gcc -c -fpic sort.c选项-fpic的作用是将源文件编译成带有PIC标志的目标文件3.将文件加入到动态库中gcc -shared xxxxx.o yyyy.o -o libxxx.so动态库的使用和静态库一样,动态原创 2020-07-02 01:53:25 · 133 阅读 · 0 评论 -
Linux复习之静态库的使用
通常,可以通过两种方法来使用静态库。第一种,参数法;(不常用)格式:gcc 主程序 -l 静态库名(去掉lib和.a) -L 静态库存放位置第二种,直接法:gcc 主程序 静态库全名下面通过一个实例来展示静态库的使用方法:先建立bank.h与sort.c这两个文件,将sort.c生成目标文件并加入到静态库libmath.a中(可以翻看博文“静态库的建立”),当下,我们只需要编写源程序main.c,调用sortaz函数接下来,再对main.c进行编译时,应该把静态库libmath.a中的相关代原创 2020-07-01 02:18:20 · 343 阅读 · 1 评论 -
Linux复习之静态库的建立
库是在链接阶段和相应的.o文件生成可执行文件,根据链接方式的不同,可以分为静态库与动态库。当使用静态库时,连接器会找出程序所需的函数,将它们复制到执行文件中,因为是完整复制,所以一旦链接成功,可执行文件在静态库不存在的情况下依然可以执行。动态库与静态库不同,动态库会在程序内留下一个 标记,当程序执行时,指明必须载入的库文件,所以当执行文件时才动态加载库文件,使用动态库必然会节约空间。在linux下进行链接首先会链接动态库,也就是如果不特别指定,会默认链接动态库。静态库的建立1.先建立并编辑bank原创 2020-07-01 01:57:51 · 160 阅读 · 0 评论 -
Linux复习之gdb断点调试实例
断点就是指在程序的某一行设置一个点位,程序在这个指定的位置中断。在gdb调试下,设置断点的指令为break,通常有以下集中方式:break :在进入指定函数时停住break :在指定行号停住break +/-offset:在当前行号的前面或者后面的offset行停住offset为自然数break filename:linenum:在源文件filename的linenum行处停住break…if…:可以使上述的参数,condition表示条件,在条件成立时停住delete:删除所有断点delet原创 2020-06-30 02:06:58 · 1107 阅读 · 0 评论 -
Linux复习之gdb调试基本指令
初学者在编辑程序时,往往会出现很多的语法错误,这些错误在编译阶段就会暴露,所以很容易被排除,但是有些错误可能出现在程序运行阶段,需要深入的测试、调试和修改。这就使得在一些大型项目里,程序的调试变的十分困难,这个时候就需要一个高效的调试工具,gdb调试工具就是当前使用最广泛的的调试工具。gdb调试基本命令1.文件清单指令:list/l作用:列出产生执行文件的源代码的一部分例如:list 10 20作用是列出10到20行之间的代码list max作用是输出函数max前后的5行程序源代码、2.原创 2020-06-28 03:11:11 · 226 阅读 · 0 评论 -
Linux复习之gdb调试举例
源程序如下,作用是通过调用函数输出1~10的和:执行编译指令:gcc -o main main.c ,编译成功后,执行./main,程序显示结果result = 45程序可以顺利的编译链接生成可执行文件,说明没有出现编译问题,但是可以看见,输出结果为134518459,明显错误。正确结果应该是55,下面利用gdb对程序进行调试,从而找到问题。为了能够使用gdb调试,在由main.c编译链接生产可执行文件main时,命令行中必须加入选项-g。具体步骤如下:1.编译main.c,指令:gcc -o原创 2020-06-28 02:54:29 · 263 阅读 · 0 评论 -
Linux复习之gcc 编译多文件
在实际的项目中,为了使代码结构更加合理,往往将主函数和其他函数放在不同的源文件中,除了主函数外,每个函数都有函数声明和函数实现两个部分。函数的声明、宏定义、自定义类型、类型别名等内容通常放在头文件(.h)里,函数的实现放在.c文件中。实例演示:1、使用vim创建test.c文件,文件内代码如下2、使用vim创建m.c,里面包含max函数的实现方法3、使用vim创建头文件bank.h,里面包含max函数的声明4、多个文件一起编译指令:gcc test.c m.c -o test将多个源文原创 2020-06-09 03:36:33 · 689 阅读 · 0 评论 -
Linux复习之gcc编译工具
初识gccgcc是“GNU Compiler Collection”的缩写,是一个编译器集合。在Linux操作系统下,gcc编译器是最常见的一种编译器,它不仅仅可以用来编译C语言,还可以用来编译C++、Java、等语言。gcc的语法格式:gcc [选项] 参数gcc命令的主要选项:[-o]:指定目标文件的名称[-g]:使生成的可执行程序中包含debug信息[-c]:只编译不链接[-E]:只做预处理[-S]:由C编译成汇编省略选项是最简单的gcc使用方式。实例:1.使用vim建立一个“m原创 2020-06-08 04:16:33 · 275 阅读 · 0 评论 -
Linux复习之vim(文本编辑器)
vim编辑器只能编辑字符,不能向Windows中的文字处理软件Word等对文字进行排版工作。vim可以执行输出、删除、查询、替换等多数文本操作,而且用户可以根据需要对其进行定制。vim共有3中工作模式:命令模式、插入模式和末行模式。1、命令模式当使用vim创建或打开一个文件时,默认的模式就是命令行模式。在此模式下输入的字符都会作为命令来解析。命令模式进入插入模式的指令:a:从当前光标位置之后插入i:从当前光标位置开始插入o:下一行开始插入O:上一行开始插入cc:整行删掉后插入C:删除光标原创 2020-06-03 02:57:37 · 335 阅读 · 0 评论 -
Linux复习之硬链接与软链接
在Linux系统中文件被分为两个部分:用户数据(user data)与元数据(meta data)。用户数据,即文件数据块(data block),数据块是记录文件真实内容的地方。元数据,则是文件的附加属性,如文件大小、创建时间、所有者信息者。在Linux系统中,元数据中的inode号(即索引节点好)才是文件中唯一的标识而不是文件名。系统通过inode号寻找正确的文件数据块。为了解决文件的共享使用问题,Linux引入了两种链接:硬链接(hard link)与软链接(又称符号链接,即soft link原创 2020-06-03 02:23:20 · 234 阅读 · 0 评论 -
Linux复习之深入了解shell
一、通配符通配符的作用是同时匹配多个文件以便于操作。常用的通配符是“*”和“?”,除此之外,还包括由[]-!组成的模式。例如:cp *.c/home:将当前目录下所有.c文件复制到/home文件夹中rm-f a?d.txt:强制删除当前目录下首字符是a、尾字符是d的文件二、重定向重定向,就是重新定向的意思。在Linux操作系统中,标准输入设备是键盘,标准输出设备是显示器。与输入有关的只有输入重定向,与输出有关的重定向分为输出重定向、附加输出重定向和错误输出重定向。(1)输入重定向(0<原创 2020-06-01 17:55:00 · 227 阅读 · 0 评论 -
Linux复习之gcc软件包的安装
Linux下翻译工具gcc的安装1.切换到root用户指令:su root2.在/mnt 下创建一个新的目录指令: cd /mnt --> mkdir dvd3.挂载镜像指令:mount /dev/cdrom /mnt/dvd4.修改yum的配置文件指令:cd /etc/yum.repos.d添加代码:vim yum.repo[serid]Name=stuBaseurl=file:///mnt/dvdgpgcheck=05.验证挂载是否正确指令:Y原创 2020-06-01 03:54:15 · 746 阅读 · 0 评论 -
Linux复习之初识shell常用命令②
文件的归档与压缩在Linux操作系统中,使用tar命令可以为文件和目录创建备份。使用tar命令,用户可以为某一特点文件创建备份文件,也可以在备份中改变文件,或者向备份文件中加入新的文件。使用tar命令,可以把大量文件和目录全部打包成一个文件,或者将备份文件和几个文件合并成一个文件,以便于网络传输。tar命令详解:使用格式:tar[主选项 + 辅助选项] + 文件或者目录主选项主要告诉tar要做的事情,辅助选项可以选用选项说明:[c]:创建打包备份文件[r]:追加到备份文件的末尾。当用户做好备份原创 2020-06-01 03:49:32 · 164 阅读 · 0 评论 -
Linux复习之初识shell常用命令①
目录与文件操作命令1、pwd命令使用格式:pwd作用:显示当前目录的绝对路径Linux中的路径分为相对路径和绝对路径,绝对路径是指从根目录/出发到当前目录或者文件的路径,而相对路径是指从当前目录到其下子目录或文件的路径。目录之间用“/”分隔。2、cd命令使用格式:cd + [目录相对路径或者绝对路径]作用:切换到指定目录3、ls命令使用格式:ls + [选项] + [文件或者目录]作用:无任何选项的情况下,参数若是目录,显示当前目录下的文件以及子目录信息;如果参数是文件,则显示原创 2020-05-29 05:09:57 · 503 阅读 · 0 评论 -
Linux复习之复习大纲
Linux程序开发:Linux系统的基础操作:Linux系统上的C/C++代码的编译连接 gcc/g++ 编译链接原理程序调试 gdb调试 多进程调试 多线程调试 core文件的调试 内存泄露检测valgrind操作系统的概念:进程管理 进程状态 程序加载 计算机基本组成内存管理和地址映射(x86体系 实地址模式 保护地址模式)多进程编程:创建进程fork 进程替换 进程间通信 信号多线程: 线程概念 线程的实现方式 线程库使用 线程同步 线程安全计算机网络:网络基础概念 网络的七层结原创 2020-05-28 03:14:51 · 154 阅读 · 0 评论