自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 隐式类型转换

C语言和C++有时候会出现一些隐式类型的转换,本文不讨论何种情况转换,讨论当转换的时候会怎么转换。用图来表示,画的特别粗略,很多类型都没表示出来,只是为了说明情况。当两种不同类型的数据进行运算的时候,两种数据转换到相同的类型进行计算。但是不能进行优先转换的降级。...

2018-12-31 00:22:59 214

原创 C++和C语言的区别(一)——函数的区别

C++有添加的新的特性也有与C语言的一些区别,为了方便学习,就特别对重要的一些特性和区别进行学习。此次学习的是:1、函数的默认参数,2、inline函数,3、函数重载 1、C++的函数默认参数:在函数声明或定义时候,给函数参数预先赋值,当函数调用有空缺参数时,就将该值作为默认参数传入。(1)默认值必须从右向左一次赋值,不可跳过。void fun(int a, int b, int...

2018-12-31 00:00:55 1693

原创 Linux系统fork和exec创建新进程

fork之后经常跟随着exec,即创建一个进程后就立马替换进程,所以并不执行一个父进程数据段、栈和堆的完全复制,因此这里使用的是写时拷贝技术。我们使用程序来演示替换:使用的程序代码类似演示父子进程的代码,但是子进程使用了exec进行替换。代码仍然会出现父子进程的打印交替出现吗?可以看到,父进程总共打印了七次,子进程直接被替换成了ps,并且没有打印信息。这是因为,exec...

2018-12-19 00:36:09 1435

原创 Linux系统fork函数所产生的文件共享

当我们了解了fork函数之后,知道子进程会拷贝父进程的信息,那如果打开文件进行文件处理和fork在同一函数中会发生什么呢?我们先创建一个在程序中打开的文件:string文件内容:(1)先open后fork 其运行结果如下图:可以看到父子进程共打印了string文件中的6个字符,这是因为父进程所有打开的文件描述符(可以查看文件描述符博客)都被复制到子进程中。先打开文件,后...

2018-12-18 17:46:10 480

原创 Linux系统的exec替换函数

fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序。exec函数负责读取可执行行文件并将其载入地址空间开始运行。我们有六种不同的exec函数可供使用,它们常常被统称为exec函数。下面这几个是exec函数的库函数,它们都依存于execve系统调用函数: execve系统调用函数:返回值:成功不返回,出错返回-1file参数:其中filenam...

2018-12-16 18:31:35 416

原创 Linux系统僵死进程的处理

下面的代码,可以看到父进程执行10次,子进程执行3次。我们将程序挂在后台运行,当子进程运行结束后,我们运行ps查看进程,可以看到,子进程好像仍然存在。 进程总归是要终结的。当一个进程终结时,内核必须释放它所占有的资源,并把这一事件,告知其父进程。但是系统为了在子进程终结后仍能获得它的信息,所以进程保留了它的进程描述符(即PCB),所以这种情况的进程叫做僵死进程。现在有以下方法可...

2018-12-15 21:50:00 612

原创 Linux系统fork函数介绍

fork函数通过拷贝当前进程创建一个子进程。在fork之前,我们先了解一些别的知识。传统的fork系统调用直接把所有的资源复制给新创建的进程。这种实现过于简单并且效率低下,因为它拷贝的数据也许并不共享,更糟的情况是,如果新进程打算立即执行一个新的映像,那么所有的拷贝都将前功尽弃。Linux的fork使用写时拷贝页实现。写时拷贝:写时拷贝是一种可以推迟甚至免除拷贝数据的技术。内核此时并不复制...

2018-12-13 21:59:36 490

原创 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 4720 1

原创 Linux系统调用之文件函数

先说明可用的文件I/O函数——打开文件,读文件,写文件等。但是在Linux中大多数文件I/O只需要用到5个函数:open、read、write、lseek及close。一、open函数调用open函数可以打开或创建一个文件。返回值:若成功则返回文件描述符,若出错则返回-1参数列表:①pathname是要打开或创建文件的名字。②flags可用来说明此函数的多个选项,用...

2018-12-12 20:25:33 996

原创 Linux系统调用之文件描述符

每个运行的中的程序被称为进程,他有一些与之关联的文件描述符。文件描述符就相当于Windows中的File * 指针,标记着文件信息,然而我们可以知道文件描述符为一个非负整数,怎么用一个非负整数描述一个文件呢。在操作系统中,每一个进程都有标记自己的进程控制块(PCB)。在PCB中,就有关于此进程所打开的文件信息,因为文件信息众多,而且打开的文件可能较多。就用一个名为file的struct...

2018-12-12 15:21:31 313

原创 Linux系统调用之系统调用过程

对于日常使用的应用也不是脱离了硬件进行执行的,为了方便使用,就出现了操作系统,如果操作系统不是开放的,那就失去了操作系统的意义,为了方便使用操作系统,操作系统预留出了一些接口,这些接口就是系统调用函数。当然系统调用函数肯定不同于库函数,接下来我将讲解Linux中的系统调用过程。下图是软硬件的简单关系。库函数:调用在用户态,执行在用户态系统调用函数,调用在用户态,执行在内核态。...

2018-12-11 23:21:49 1141

原创 Linux中输入输出缓冲区的刷新

我们知道printf()函数有buff缓冲区,但是这个缓冲区是怎么工作的呢。其实我们程序有scanf或gets等这种输入函数的时候,有没有发现,当我们输入字符串等数据在窗口的时候,并不会立马输出我们的字符,需要我们继续按下回车或别的与字符串无关的操作才能使字符串打印至屏幕。这就是因为这些输入函数(scanf,gets等)拥有输入缓冲区。类似printf和puts的输出函数也有输出缓冲区。...

2018-12-11 22:10:33 3435

原创 Linux下主函数参数与主函数参数传递

大家可能比较少用到主函数的参数或不带主函数的参数,可能经常用到的主函数参数有两个,但主函数的参数共有三个,下面是主函数的函数原型:int main(int argc, char * argv[], char * envp[])我来大概描述一下这三个参数分别都是干什么的argc:传递的参数列表中参数的个数(即argv数组的长度)argv:传递的参数列表(因为是char * 型...

2018-12-11 21:58:59 1347

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除