- 博客(33)
- 收藏
- 关注
转载 Linux进程退出码
#include int main(void) { return -1; } 编译好,然后运行,然后在shell里面查看进程退出码,键入:echo $?,我们发现拿到的进程退出码是255。我们返回的明明是-1,为什么拿到的却是255呢?还得从进程的状态码开始讲起,我们知道,当一个进程退出的时候,父进程一般都会进行收尾工作,就是调用wait或者w
2016-08-23 15:43:28 3322
转载 Linux进程间通信之——管道(整理)
进程间通信 fork pipe pie_t 等用法(管道机制 通信)每个进程各自有不同的用户地址空间,任 何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。如下图所
2016-08-23 11:11:04 628
原创 僵尸进程
在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init 来接管他,成为他的父进程…一个
2016-08-22 21:45:11 1508
原创 操作系统自举后做了什么???
前段时间在看清华大学出版社出版的《Linux教程》(05年6月第一版)。在248页第十三章《进程》有一节是简述Linux进程的层次关系的,把操作系统自启动后都做了什么,说得比较清晰,看过后受益匪浅。 就是喜欢看这种能把整个框架说得比较清楚的文章!特抄来以共享: 当打开Linux系统,LILO(LInux LOader)找到Linux内核把它加载到内存。它初始化各种硬件,
2016-08-22 20:11:55 2474
转载 fork()与vfork()的区别
fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别: 1. fork ():子进程拷贝父进程的数据段,代码段 vfork ( ):子进程与父进程共享数据段 2. fork ()父子进程的执行次序不确定 vfork 保证子进程先运行,在调用exec 或exit 之前与父进程数据是共享的,在它调用exec 或e
2016-08-22 08:57:21 587
转载 Linux之写时复制技术
写入时复制(Copy-on-write)是一个被使用在程式设计领域的最佳化策略。其基础的观念是,如果有多个呼叫者(callers)同时要求相同资源,他们会共同取得相同的指标指向相同的资源,直到某个呼叫者(caller)尝试修改资源时,系统才会真正复制一个副本(private copy)给该呼叫者,以避免被修改的资源被直接察觉到,这过程对其他的呼叫只都是通透的(transparent
2016-08-21 16:44:45 3125 1
转载 进程的调度算法
抢占式 多任务 分时前面我们已经明确了调度可能发生的时机,现在我们通过这些调度时机来理清下现代操作系统中这几个重要的概念。1.多任务在单任务系统中,一个进程即使发生I/O阻塞(比如等待用户输入)时,操作系统也不会执行另一进程,整个系统都将陷入等待的空闲中。而多任务就是指当一个正在执行的进程发生I/O阻塞或等待其他资源需要暂停时,操
2016-08-21 16:03:07 1947
原创 Linux基于流IO
基于流的I/O操作 流的打开函数:(1) FILE *fopen(const char *pathname,const char *type); (2) FILE *freopen(const char *pathname,const char *type, FILE *fp); (3) FILE *fdopen(int filede
2016-08-21 11:47:58 2315
转载 Linux网络编程之IO模型
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。 例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回
2016-08-21 10:32:18 766
转载 Linux文件描述符(转)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/389652391. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的
2016-08-20 21:56:19 731
转载 Linux系统调用接口(转)
以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数。这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使是简单的字母序英文列表,能做到这么完全也是很罕见的。 按照惯例,这个列表以man pages第2节,即系统调用节为蓝本。按照笔者的理解,对其作了大致的分类,同时也作了一些小小的修改,删去了几个仅供内核使
2016-08-20 21:34:53 1010
转载 Linux的设备
1.字符设备(char device)字符设备是Linux最简单的设备,可以像文件一样访问。初始化字符设备时,它的设备驱动程序向Linux登记,并在字符设备向量表中增加一个device_struct数据结构条目,这个设备的主设备标识符用做这个向量表的索引。一个设备的主设备标识符是固定的。chrdevs向量表中的每一个条目,一个device_struct数据结构,包括两个元素:一个登记设备驱动程
2016-08-20 21:20:38 635
转载 Linux系统目录(转)
1、Linux文件系统的层次结构 在Linux或Unix操作系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。 文件系统的最顶层是由根目录开始的,系统使用”/“来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录文件。如此反复就可以构成一个庞大的文件系统。 在Linux文件系统中有两个特
2016-08-20 21:12:20 617
原创 Linux的文件类型分类
Linux文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具... .... 或 cp工具等。linux文件的删除方式是用rm 命令。Linux文件类型;Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话
2016-08-20 20:59:30 4328
转载 Linux的文件系统(转)
linux文件系统简介Linux下一切皆文件 linux的文件系统,主要包括了linux磁盘分区和目录、挂载基本原理、文件存储结构、软链接硬链接、和常见目录的介绍。 如有不对之处请大家多多指出。1.Linux磁盘分区和目录 Linux发行版本之间的差别很少,差别主要表现在系统管理的特色工具以及软件包管理方式的不同。目录结构基本上都是一样的。 Win
2016-08-20 20:47:15 902
转载 C++中的虚函数表(转)
假设我们有这样的一个类: class Base { public: virtual void f() { cout "Base::f" << endl; } virtual void g() { cout "Base::g" << endl; } virtual void h()
2016-08-20 17:12:45 548
原创 C++中的多态一
多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。在C++中有两种多态性 : 1.编译时的多态性-----通过函数的重载和运算符的重载来实现的 2.运行时的多态性-----运行时的多态性是指在程序执行前,无法根据函数名和参数来确定该调用哪
2016-08-20 16:05:01 562
转载 C++中的虚拟继承(二)【转】
http://blog.csdn.net/wangxingbao4227/article/details/6772579C++中虚拟继承的概念为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。这样不仅就解决了二义性问题,也节省了内存,避
2016-08-12 14:19:49 493
原创 C++中的虚基类
虚基类共同基类设置为虚基类,这样从不同路径继承来的同名数据成员在内存中就只有一个拷贝,同名函数也只有一种映射虚基类(virtual base class)定义方式如下:class 派生类名:virtual 访问限定符 基类类名{...};class 派生类名:访问限定符 virtual 基类类名{...};virtual 关键字只对紧随其后的基类名起作用
2016-08-11 21:23:48 939
原创 C++ 继承(三)
C++中,比较类的三种继承方式:共有继承、受保护继承、私有继承之间的区别在三种不同方式的继承下,派生类对原来基类中的成员访问的方式也不一样,具体如下: 1>公有继承中: (1)基类的共有成员就相当于是派生类的公有成员,也就是说派生类可以像访问自身公有成员一样访问从基类继承的公有成员。 (2)基类的保护成员就相当于是派生类的保护成员,即,派生类可以像访问自
2016-08-11 19:02:30 223
原创 C++中的继承(二)
一、基本概念1、类的继承,是新的类从已有类那里得到已有的特性。或从已有类产生新类的过程就是类的派生。原有的类称为基类或父类,产生的新类称为派生类或子类。 2、派生类的声明:class 派生类名:继承方式 基类名1, 继承方式 基类名2,...,继承方式 基类名n{ 派生类成员声明;}; 3、一个派生类可以同时有多个基类,这种情况称为多重继承,派生类
2016-08-11 17:59:31 555
原创 C++中的继承(一)
继承(inheritance)机制 是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构。体现了由简单到复杂的认识过程。 思想: 从现有的类继承属性和行为,然后增加属性和行为定制类以满足我们的实际要求,创建派生类不会英系那个基类的
2016-08-11 16:22:34 543
原创 volatile
volatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.简单地说就是防止编译器对代码进行优化.比如如下程序:1234XBYTE[2]=0x55;XBYTE[2]=0x56;XBYTE[2]=0x57;XBYTE[2]=0x58;
2016-08-11 11:30:15 517
原创 一道题说明笔试的陷阱
写一个函数,完成内存移动(拷贝),并为其写一个简单的测试用例来进行测试。 程序清单 1 V0.1版程序void MyMemMove(char *dst,char *src,int count){ while(count--) { *dst++ = *src++; }} 程序清单 2 测试用例void Tes
2016-08-10 17:36:26 818
原创 宏和内联函数的小结
内联函数和宏 宏定义是C语言提出的,它在预处理的地方将代码展开,这样做,相比于函数调用,可减少额外的时间和空间开销。 但是宏定义有一些缺点,最明显的是,它容易产生二义性。如:#define MAX(a, b) a>b?a:b 使用该宏: MAX( num1, num2 ,因为宏展开后变成 num1>num2 ?num1:num2,但是,如果是这样调用的:MAX( 17+32, 25+21)
2016-08-09 12:19:51 573
转载 软链接与硬链接的小结(转)
对于一个文件来说,有唯一的索引接点(inode)与之对应,而对于一个索引接点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问该文件。注意在Linux下是一切皆文件的啊,文件夹、新加的硬盘 ...都可以看着文件来处理的啊。 连接有软连接和硬连接(hard link)之分的,软连接(symbolic link)又叫符号连接。符号连接相当于Window
2016-08-08 19:29:18 666
转载 Linux下常见的系统命令小结(转)
grep命令该命令常用于分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等,它的简单语法为[plain] view plain copy print?grep [-acinv] [--color=auto] '查找字符串' filename 它的常用
2016-08-08 19:06:03 909 1
原创 Linux下制作动态库与静态库
静态函数库: 1.这类库的名字一般是libxxx.a; 2.利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进可执行文件了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译,而且体积也较大动态函数库: 这类库的
2016-08-08 17:55:54 642
原创 哈夫曼树(理论篇)
与哈夫曼树有关的概念: 路径: 树中一个结点到另一个结点之间的分支构成这两个结点之间的路径。 路径长度:路径上的分枝数目称作路径长度。 树的路径长度:从树根到每一个结点的路径长度之和。 结点的带权路径长度:在一棵树中,如果其结点上附带有一个权值,通常把该结点的路径长度与该结点上的权值
2016-08-02 11:50:22 1586
原创 二叉树(理论篇)
二叉树: 二叉树是每个节点最多有两个子树的树结构1.二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),2.二叉树的子树有左右之分,次序不能颠倒。3.二叉树的第i层至多有2^(i-1)个结点;深度为k的二叉树至多有2^k-1个结点;4.对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1。满二叉
2016-08-01 21:34:29 1086
原创 树(理论篇)
节点的度: 一个节点含有的子树的个数称为该节点的度双亲节点或父节点: 若一个节点含有子节点,则这个节点称为其子节点的父节点孩子节点或子节点: 一个节点含有的子树的根节点称为该节点的子节点兄弟节点: 具有相同父节点的节点互称为兄弟节点树的度: 一棵树中,最大的节点的
2016-08-01 17:44:54 578
原创 进程的状态
进程三态状态装换图 就绪态只需要等待处理机(CPU)阻塞态可能在等待输入输出,即使分配给处理机也是徒劳调度进程,只需要等待就绪队列里的进程,因为阻塞状态可以转换到就绪队列里去就绪原因: 缺少cpu 阻塞原因 1.内存资源紧张2. 无就绪队列,处理机空闲3 .I/O速度比处理机速度慢的多,可能出现全部进程
2016-08-01 17:08:34 1728
原创 操作系统调度算法(上)
操作系统的分类:(按环境分):批处理操作系统: 又分为: 1.单通道批处理系统:如dos,用户一次可以提交多个作业,但系统一次只处理 一个作业,处理完一个作业后再调入下一个作业进行处理。这些调度、切换系 统自动完成。不需人工干预 2.多通道批处理系统:同一个
2016-08-01 16:03:32 1910
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人