Linux
HDong99
这个作者很懒,什么都没留下…
展开
-
Linux中Makefile的使用
我也是初学Linux,对Linux中的编译产生的一定的厌烦,正巧遇到了makefile。本文只是讨论Makefile的简单使用,并没有进入很深层次的探讨,谢谢大家。一、makefile的引入我们现在已有main.c,mymath.c,mymath.h三个文件,想要此程序能正常运行就需要输入以下命令进行编译连接。但是当文件多了之后就可能需要多个文件名,会产生极大的麻烦。有了m...原创 2018-11-16 00:42:24 · 1739 阅读 · 0 评论 -
Linux系统的信号
(1)信号概念信号可以完成进程间通信,但是它的传输只能是一个信号值。信号是Linux系统响应某些条件而产生的一个事件。接收到该信号的进程会相应地采取一些行动。我们用术语生成来表示一个信号的产生,使用术语捕获表示接收到一个信号。信号是由于某些错误条件而生成的,如内存段冲突、非法指令等等。信号的名称在头文件signal.h中定义,它们都以SIG开头,部分信号如下:(2)发送信号...原创 2019-01-10 22:23:07 · 257 阅读 · 0 评论 -
Linux系统fork和exec创建新进程
fork之后经常跟随着exec,即创建一个进程后就立马替换进程,所以并不执行一个父进程数据段、栈和堆的完全复制,因此这里使用的是写时拷贝技术。我们使用程序来演示替换:使用的程序代码类似演示父子进程的代码,但是子进程使用了exec进行替换。代码仍然会出现父子进程的打印交替出现吗?可以看到,父进程总共打印了七次,子进程直接被替换成了ps,并且没有打印信息。这是因为,exec...原创 2018-12-19 00:36:09 · 1436 阅读 · 0 评论 -
Linux系统fork函数所产生的文件共享
当我们了解了fork函数之后,知道子进程会拷贝父进程的信息,那如果打开文件进行文件处理和fork在同一函数中会发生什么呢?我们先创建一个在程序中打开的文件:string文件内容:(1)先open后fork 其运行结果如下图:可以看到父子进程共打印了string文件中的6个字符,这是因为父进程所有打开的文件描述符(可以查看文件描述符博客)都被复制到子进程中。先打开文件,后...原创 2018-12-18 17:46:10 · 482 阅读 · 0 评论 -
Linux系统调用之系统调用过程
对于日常使用的应用也不是脱离了硬件进行执行的,为了方便使用,就出现了操作系统,如果操作系统不是开放的,那就失去了操作系统的意义,为了方便使用操作系统,操作系统预留出了一些接口,这些接口就是系统调用函数。当然系统调用函数肯定不同于库函数,接下来我将讲解Linux中的系统调用过程。下图是软硬件的简单关系。库函数:调用在用户态,执行在用户态系统调用函数,调用在用户态,执行在内核态。...原创 2018-12-11 23:21:49 · 1142 阅读 · 0 评论 -
Linux中输入输出缓冲区的刷新
我们知道printf()函数有buff缓冲区,但是这个缓冲区是怎么工作的呢。其实我们程序有scanf或gets等这种输入函数的时候,有没有发现,当我们输入字符串等数据在窗口的时候,并不会立马输出我们的字符,需要我们继续按下回车或别的与字符串无关的操作才能使字符串打印至屏幕。这就是因为这些输入函数(scanf,gets等)拥有输入缓冲区。类似printf和puts的输出函数也有输出缓冲区。...原创 2018-12-11 22:10:33 · 3437 阅读 · 0 评论 -
Linux下主函数参数与主函数参数传递
大家可能比较少用到主函数的参数或不带主函数的参数,可能经常用到的主函数参数有两个,但主函数的参数共有三个,下面是主函数的函数原型:int main(int argc, char * argv[], char * envp[])我来大概描述一下这三个参数分别都是干什么的argc:传递的参数列表中参数的个数(即argv数组的长度)argv:传递的参数列表(因为是char * 型...原创 2018-12-11 21:58:59 · 1347 阅读 · 0 评论 -
Linux系统的exec替换函数
fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序。exec函数负责读取可执行行文件并将其载入地址空间开始运行。我们有六种不同的exec函数可供使用,它们常常被统称为exec函数。下面这几个是exec函数的库函数,它们都依存于execve系统调用函数: execve系统调用函数:返回值:成功不返回,出错返回-1file参数:其中filenam...原创 2018-12-16 18:31:35 · 417 阅读 · 0 评论 -
Linux系统僵死进程的处理
下面的代码,可以看到父进程执行10次,子进程执行3次。我们将程序挂在后台运行,当子进程运行结束后,我们运行ps查看进程,可以看到,子进程好像仍然存在。 进程总归是要终结的。当一个进程终结时,内核必须释放它所占有的资源,并把这一事件,告知其父进程。但是系统为了在子进程终结后仍能获得它的信息,所以进程保留了它的进程描述符(即PCB),所以这种情况的进程叫做僵死进程。现在有以下方法可...原创 2018-12-15 21:50:00 · 614 阅读 · 0 评论 -
Linux系统fork函数介绍
fork函数通过拷贝当前进程创建一个子进程。在fork之前,我们先了解一些别的知识。传统的fork系统调用直接把所有的资源复制给新创建的进程。这种实现过于简单并且效率低下,因为它拷贝的数据也许并不共享,更糟的情况是,如果新进程打算立即执行一个新的映像,那么所有的拷贝都将前功尽弃。Linux的fork使用写时拷贝页实现。写时拷贝:写时拷贝是一种可以推迟甚至免除拷贝数据的技术。内核此时并不复制...原创 2018-12-13 21:59:36 · 490 阅读 · 0 评论 -
Linux系统下循环fork所产生的进程数量
我们知道fork函数可以创建一个新进程,那当fork和循环一起使用的时候会发生什么情况。为了方便查看进程数量,我们在fork的同时打印A,分析A的数量就可知有多少个进程。情景1(循环2次,先fork后打印) 程序代码如图所示,运行结果如下图:可以看到,总打印出来了6个A,为什么是6个A呢?6个A就是6个进程吗?其实并不是,因为我们是先fork后打印。所以,在第1次循环,...原创 2018-12-13 20:16:34 · 4721 阅读 · 1 评论 -
Linux系统调用之文件函数
先说明可用的文件I/O函数——打开文件,读文件,写文件等。但是在Linux中大多数文件I/O只需要用到5个函数:open、read、write、lseek及close。一、open函数调用open函数可以打开或创建一个文件。返回值:若成功则返回文件描述符,若出错则返回-1参数列表:①pathname是要打开或创建文件的名字。②flags可用来说明此函数的多个选项,用...原创 2018-12-12 20:25:33 · 998 阅读 · 0 评论 -
Linux系统调用之文件描述符
每个运行的中的程序被称为进程,他有一些与之关联的文件描述符。文件描述符就相当于Windows中的File * 指针,标记着文件信息,然而我们可以知道文件描述符为一个非负整数,怎么用一个非负整数描述一个文件呢。在操作系统中,每一个进程都有标记自己的进程控制块(PCB)。在PCB中,就有关于此进程所打开的文件信息,因为文件信息众多,而且打开的文件可能较多。就用一个名为file的struct...原创 2018-12-12 15:21:31 · 313 阅读 · 0 评论 -
Linux进程间通信(一)——管道
我们可以使用信号,创建通知事件,通过它引起响应,但传送的信息只限于一个信号值。接下来我将介绍管道,通过它进程之间可以交换更有用的数据。(1)管道的定义——什么是管道当从一个进程连接数据流到另一个进程时,我们使用术语管道(pipe),我们通常是把一个进程的输出通过管道连接到另一个进程的输入。对于shell命令来说,命令的连接是通过管道字符来完成的,如下:shell安排两个命令的标...原创 2019-01-10 23:58:58 · 212 阅读 · 0 评论