自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 inode以及软硬链接

iNode1、inode是什么?  理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector),每个扇区储存512字节(相当于0.5KB),操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的

2017-08-11 12:43:46 516

原创 NAT技术与代理服务器调研

NAT技术:1、概念:       NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种将私有(保留)

2017-08-02 12:19:58 533

原创 子进程的异步等待方式

我们知道当一个父进程创建一个子进程时,最好要调用wait或者waitpid函数等待子进程,不然会产生僵尸进程造成内存泄漏的问题。一般父进程在等待子进程时有两种方式等待,一种是阻塞式等待,这时父进程不能处理自己的其他事情;另一种是非阻塞式等待,父进程处理自己的工作的同时,要以定时轮询的方式,去查看有没有子进程等待清理。     其实,子进程在终止时会给父进程发SIGCHLD信

2017-08-01 18:26:55 383

原创 菱形继承与虚拟继承

面向对象程序设计的核心思想是封装(数据抽象)、继承和多态(动态绑定)。 通过使用数据抽象,我们可以将类的接口与实现分离; 使用继承,可以定义相似的类型并对其相似关系建模; 使用动态绑定,可以在一定程度上忽略相似类型的区别,而用统一方式使用它们的对象。简单的说,继承的使用就是为了代码复用。 1.继承1>继承机制:是为了扩展原有类,增加新的功能;

2017-08-01 15:10:24 330

原创 TCP三次握手与挥手

1、TCP:TCP(Transmission Control Protocal传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP工作在网络OSI七层模型中的第四层-----传输层。TCP的可靠性在于:1)TCP是基于序号请求、确认机制(应答机制----一请求一应答);2)TCP是面向连接的全双工的面向字节流服务;3)基于序号丢包机制,确保数据按序到达,确

2017-08-01 00:44:50 339

原创 select服务器端的代码以及select的优缺点与多线程多进程服务器的比较

.select服务器优缺点: 优点: (1)select()的可移植性更好,在某些Unix系统上不支持poll() ; (2)select() 对于超时值提供了更好的精度:微秒,而poll是毫秒; (3)select服务器不需要建立多个线程、进程就可以实现一对多的通信; (4)select服务器可以同时等待多个文件描述符,效率比起多进程多线程来说要高很多。缺点: (

2017-07-29 15:51:07 3325

原创 守护进程的实现以及fork两次的原因

1、守护进程的概念     守护进程(Daemon)也称精灵进程,是一种运行在后台的一种特殊的进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。Linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互。其他进程 都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程不收用户登录注销的影响,它们一直在运

2017-07-23 17:26:23 564

原创 动态内存管理总结(malloc、calloc、realloc的区别),以及内存泄漏常见问题

一、C语言中 malloc、calloc、realloc的区别(1)C语言跟内存分配方式从静态存储区域分配       内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量。在栈上创建       在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内

2017-07-23 11:12:37 1254

原创 引用、指针、const引用的学习

一、引用简介  引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。  引用的声明方法:类型标识符 &引用名=目标变量名;引用的特点:    1)一个变量可取多个别名;    2)引用必须初始化;    3)引用只能在初始化的时候引用一次,不能改变为再引用其他的变量; 【例1】:int a; int &ra=a; //定

2017-07-21 15:23:44 311

转载 面试题----new/delete、malloc/free、new[]/delete[]的用法与区别以及new的三种使用方法

new和delete的用法: 对于计算机程序设计而言,变量和对象在内存中的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象。对于不能确定需要占用多少内存的情况,动态内存分配解决了这个问题。  new和delete运算符是用于动态分配和撤销内存的运算符。  一、new用法  1.开辟单变量地址空间  使用new运算符时必须已知数据类型,

2017-07-18 09:29:37 1140

原创 面试题——static详解

像在VB,C#,C,C++,Java,PHP中我们可以看到static作为关键字和函数出现,在其他的高级计算机语言如FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、PROLOG、Ada等语言中也是有出现的,只是有着不同的作用,对于其具体作用,读者有需要的时候是可以具体查阅的。中文名 static 分类关键字举例 VB,C#,C,C++,PHP 来

2017-07-16 15:05:43 1177

原创 C++实现函数重载

1、函数重载的概念:重载函数是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型、顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。也就是说c++中相同的函数名函数参数不同代表了不同的函数,当你去调用这些函数时,编译器可以根据你的传入参数的类型去判断

2017-07-06 20:57:31 478

原创 crond与crontab调研

1、概念:crond的概念和crontab是不可分割的。1)crond crond是一个命令,常见于Unix和类Unix的操作系统中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放区“crontab”文件中,以供之后读取和执行。作业规划进程是Linux下用来定期执行命令或指定程序任务的一种服务或软件。 安装完操作系统后,默认会启动crond任务调度服务。c

2017-07-04 09:41:44 301

原创 对比线程安全和可重入函数

1、线程安全(1)概念:     线程安全的概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。如果你的程序所在的进程中有多个线程在同时运行,而这些线程可能同时运行一段代码或同时访问一个对象,如果每次运行完这段代码或访问完这个对象之后,所得到的结果和单线程运行的结果一样,而其他变量的值也和预期的保持一致,那么就认为是线程安

2017-07-03 14:17:21 300

原创 编写mysleep

1、内核如何实现信号的捕捉:  如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。具体的步骤如下:1) 用户程序注册了SIGQUIT信号的处理函数sighandler。 2) 当前正在执行main函数,这时发生中断或异常切换到内核态。3)在中断处理完毕后要返回用户态的main函数之前检查到有信号SIGQUIT递达。4)内

2017-07-02 17:59:27 332

原创 信号阻塞之信号屏蔽pending

1、(1)信号是怎么产生的?从键盘中产生(ctrl -c 、  ctrl -z 、 ctrl \)软硬件异常结合通过命令kill产生通过系统函数产生有软件产生(2)信号的处理:忽略 默认动作 自定义捕捉      默认动作就是接收到信号知道怎么处理,比如指针异常实际就是操作系统检测到异常发给了进程11号信号,除0就是发给了进程8号信号,在进程收到这些

2017-07-01 17:23:28 555

原创 读者写者模型(概念&与生产消费者的区别¥读写优先级问题)

1、读者写者模型的概念: 读者和写者模型是操作系统中的一种同步与互斥机制,我们知道在一些程序中存在读者写者问题,就是对某些资源的访问会存在两种可能的情况:一种就是写操作,写操作是可以独占资源的,也就是具有排他性;另一种情况就是读操作,在读操作中可以有多个资源并发的去访问某种资源,它的访问方式是共享的。这种模型是从对文件的读写操作中总结出的一种模型,同上篇博客(321原则)。(1)3种关

2017-06-30 15:20:33 1277

原创 生产者与消费者模型(基于单链表、环形队列、多线程、多消费多生产)

生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者,用于从缓冲区中取出消息。问题出现在当缓冲区已经满了,而此时生产者还想向其中放入一个新的数据项的情形,其解决方法是让生产者此时进行休眠,等待消费者从缓冲区中取走了一个或者多个数据后再去唤醒它。

2017-06-18 17:01:22 2294 2

原创 死锁&死锁的产生条件&死锁的避免

对于锁这个字,大家一定不会陌生,因为我们生活中就存在着大量的锁,它们各个方面发挥着它的作用,现在世界中的锁的功能都可归结为一句话,就是阻止某些人做某些事,例如,门锁就是阻止除了屋主之外的人进入这个房子,你进入不到这个房子,也就不能使用房子里面的东西。死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将

2017-06-13 09:08:19 4320 6

原创 线程的概念&线程控制&分离线程

1、线程(1)线程的概念      一般来说,我们把正在计算机中执行的程序叫做"进程"(Process) ,而不将其称为程序(Program)。所谓"线程"(Thread),是"进程"中某个单一顺序的控制流。某些地方用轻量级进程(Lightweig ht Process)来代替线程,就象进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部

2017-06-08 15:23:54 656

原创 IPC主题三:共享内存

1、共享内存共享内存(shared memory)从字面意义解释就是多个进程可以把一段内存映射到自己的进程空间,以此来实现数据的共享以及传输,这也是所有进程间通信方式中最快的一种。共享内存是Unix下的多进程之间的通信方法,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。共享内存指在多处理器的计算机系统中,可以被不同中央处理器(

2017-06-07 19:48:16 385

原创 IPC主题二:信号量

1、信号量的概念:   信号量是一个特殊的变量,它的本质是一种数据操作锁,它本身不具有素具交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步等功能。程序对其访问都是原子操作,且只允许对它进行等待(即P(信号变量))和发送(即V(信号变量))信息操作。最简单的信号量是只能取0和1的变量,这也是信号量最常

2017-06-06 12:38:16 384

原创 IPC主题一:消息队列

1、什么是消息队列   消息队列(也叫报文队列)是Unix系统V版本中3中进程间通信机制之一。另外两个是共享内存和信号量。这些IPC机制使用共同的授权方法。只有通过系统调用将标识符传递给核心之后,进程才能存取这些资源。这种系统IPC对象使用的控制方法和文件系统非常相似。使用对象的引用标识符作为资源表中的索引。消息队列就是一个西欧阿西的链表。就是把消息看做一个记录,并且这个记录具有特定的格式以及

2017-06-05 11:46:56 487 1

原创 字符串函数整理2

前面的博客中我已经详细解释过strcpy,strlen,strchr,strcmp,strcat,strstr,memmove,memcopy这几个字符串,其他的字符串函数只是稍微说了一下。由于我们又学习了一些字符串函数,所以接下来我再详细补充一些这样的函数。1、字符串操作 strncpy(p, p1, n) 复制指定长度字符串 strncat(p, p1, n) 附加指定长度字符

2017-06-03 08:35:42 444

原创 linux中的匿名管道和命名管道

一、管道的概念      管道是一种两个进程间进行单向通信的机制。 管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。管道又分为匿名管道(pipe)和命名管道(pipo)。管道有如下特质:(1)其本质是一个伪文件(实为内核缓冲区)(2) 由两个文件描述符引用,一个表示读端,一个表示写端。(3) 规定

2017-05-29 12:58:48 3546

原创 C语言中有关指针的学习

一、指针的概念:      在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。 指针的本质:指针其实是一个整数计算机中的内存都是编址的

2017-05-27 10:55:49 500 1

原创 shell之输入输出重定向

1.shell的简介:     (1) 在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下的和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定

2017-05-21 10:59:14 2088

原创 可变参数列表源码的剖析

C语言中的可变参数1、C语言中的可变参数列表:C语言中有时候会遇到一些参数个数是可变的函数,像scanf,printf等,这些函数内部的参数列表都是可变的。通过将函数实现为可变参数的形式,使得函数可以接受1个以上的任意多个参数。(不固定)如函数原型:scanf(const char * format,…);解释:除了format以外,后面跟着的参数 个数,类型是可变的,用…作为

2017-05-20 12:39:04 396

原创 函数的调用,栈帧的创建和销毁

一、什么是栈帧?     在进行函数的调用(栈帧)的分析前,我们先了解下 main 函数的调用吧,通过以前的学习,我们知道 main 函数也是被调用的,先在  __tmainCRTStartup  函数中调用,而 __tmainCRTStartup 函数是在 mainCRTStartup  中被调用的。     恰如这样的调用,我们发现每一次函数调用都是一个过程,这个过程我们称

2017-05-18 20:04:46 964 2

原创 文件描述符与FILE之间的关系

1.文件描述符:   在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。POSIX标准要求每次打开文件时(含socket)必须使用当前进程中最小可用

2017-05-15 11:13:51 1100

原创 僵尸进程和孤儿进程的模拟实现

首先,介绍一下僵尸进程与孤儿进程定义:僵尸进程:一个子进程在其父进程没有调用wait()或waitpid() 的情况下退出,子进程就是僵尸进程,不及时回收僵尸进程会造成内存泄漏。 孤儿进程:一个父进程退出,而他的一个或多个子进程还在运行,那子进程就成为孤儿进程,孤儿进程将被init进程(1号进程)所收养,并由init进程对他们完成状态收集工作。 僵尸进程将会导致资源浪费,而孤儿

2017-04-28 17:33:46 391 1

原创 atexit()函数调用注册的顺序

Linux下的atexit()函数 按照ISO C的规定,一个进程可以登记至少32个函数,这些函数将由exit自动调用。一个进程可以登记若干个函数,这些函数由exit自动调用,这些函数被称为终止处理函数,atexit函数可以登记这些函数。exit调用终止处理函数的顺序和atexit登记的顺序相反,如果一个函数被多次登记,也会被多次调用。 atexit函数是一个特殊的函数,它是在

2017-04-27 20:48:15 451

原创 代码的编译+链接过程的介绍

C语言的编译链接过程要把我们编写的一个C程序(源代码)转换成可以在硬件上运行的程序(可执行程序),需要进行编译和链接。编译就是把文本形式源代码翻译成机器语言形式的目标文件的过程。链接就是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下:     从上图可以看出,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括

2017-04-25 16:54:17 905

原创 A C M time

A C M time提到ACM我们会想到:ACM程序设计大赛。不过这里的ACM,都指的是时间。下面看一下他们的概念:atime access time :访问时间,文件被读取或执行时会改变mtime modify time:修改时间,文件本身内容被修改时会改变ctime change time:更改时间,文件的属性被修改时会改变,如修改文件的权限

2017-04-24 21:05:50 424

原创 字符串函数整理

str…字符串操作函数(1)char stpcpy(char *dest,const char *src)将字符串src复制到dest(2)char strcat(char *dest,const char *src)将字符串src添加到dest末尾(3)char strchr(const char *s,int c)检索并返回字符c在字符串

2017-04-23 11:37:08 520

原创 Linux下进度条的编写和实现(gcc 和 Makefile)

1.  首先,我们对Makefile进行了解         (1)  Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。makefile就像一个Shell脚本⼀样,其中也可以执行操作系统的命令。makefile是一个包含依赖方法和依赖关系的文件,make是一个命令。           (2)Mak

2017-04-23 10:56:48 532

原创 三子棋和五子棋的代码

三子棋game.h#ifndef __GAME_H__#define __GAME_H__#include#include#include#includeenum OPTION{EXIT,PLAY};#define ROWS 3#define COLS 3void init_board(char board[ROWS][COLS]

2017-04-20 19:40:03 279

原创 猜字游戏的代码

#include #include #include void menu(){printf("**********************************\n");printf("*********** 1.play **********\n");printf("*********** 0.exit **********\n");printf("******

2017-04-19 21:14:55 1335

原创 Linux下的粘滞位详解

1.产生粘滞位的原因:Linux下有一个用于存放临时文件的目录 /temp,每一个用户产生的临时文件都存放在 /temp目录下面,而且每个用户都对于这些文件具有写权限,为了防止用户对于除自己外的其他用户的文件进行删除操作,所以产生了粘滞位。2.什么是粘滞位? 上图所示的t就是所谓的粘滞位;对于权限为777的目录设置粘滞位以后,每个用户只能删除

2017-04-19 18:48:01 613

原创 Linux下 标识符task_struct结构体详解

每个进程在内核中都有⼀个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。现在我们全面了解一下其中都有哪些信息。    在Linux中,这个结构叫做task_struct。    task_struct是Linux内核的一种数据结构,它会被装载到RAM里并且包含着进程的信息。每个进程都把它的信息放在 task_struct 这个数据结构里,

2017-04-16 22:30:14 762

空空如也

空空如也

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

TA关注的人

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