02 2017 档案

摘要:转自:http://blog.csdn.net/zhangxinrun/article/details/6721427 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个 阅读全文
posted @ 2017-02-26 00:47 柳下_MBX 阅读(587) 评论(1) 推荐(0)
摘要:匿名管道的使用 匿名管道主要用于本地父进程和子进程之间的通信, 在父进程中的话,首先是要创建一个匿名管道, 在创建匿名管道成功后,可以获取到对这个匿名管道的读写句柄, 然后父进程就可以向这个匿名管道中写入数据和读取数据了, 但是如果要实现的是父子进程通信的话,那么还必须在父进程中创建一个子进程, 同 阅读全文
posted @ 2017-02-25 19:58 柳下_MBX 阅读(633) 评论(0) 推荐(0)
摘要:当系统创建一个进程同时为其创建它地址空间时,此地址空间中大部分都是闲置的。为了使用这部分地址空间,我们必须调用VirtualAlloc来分配其中的区域。分配区域的操作被称为预定。 当应用程序预定地址空间区域时,系统会确保预定的区域的起始地址正好是分配粒度的整数倍。分配粒度根据不同的平台而有所不同。现 阅读全文
posted @ 2017-02-25 10:37 柳下_MBX 阅读(855) 评论(0) 推荐(0)
摘要:汇集很多博客于一体的,大概就这些 1.调度 在传统的操作系统中,拥有资源的基本单位和独立调度、分派的基本单位都是进程。而在引入线程的操作系统中,则把线程作为调度和分派的基本单位。而把进程作 为资源拥有的基本单位,使传统进程的两个属性分开,线程便能轻装运行,从而可显著地提高系统的并发程度。 在同一进程 阅读全文
posted @ 2017-02-25 01:23 柳下_MBX 阅读(464) 评论(0) 推荐(0)
摘要:解决死锁的基本方法:预防死锁:资源一次性分配:(破坏请求和保持条件)可剥夺资源:即当某进程新的资源未满足时,释放已占有的资源(破坏不可剥夺条件)资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件) 避免死锁:预防死锁的几种策略,会严重地损害系 阅读全文
posted @ 2017-02-24 21:09 柳下_MBX 阅读(5308) 评论(0) 推荐(0)
摘要:1:连续的内存空间分配: (1)单一连续分配:只能单作业,单任务运行: 分为系统和用户区:用户区是指除了系统需外左右的内存,由于单用户,单任务,要不都被占用,要不全空 (2):固定空间分配:固定分区分配是最简单的一种多道程序存储管理方式,它将用户内存空间划分为若干个固定大小的区域,每个分区只装入一道 阅读全文
posted @ 2017-02-24 20:29 柳下_MBX 阅读(331) 评论(0) 推荐(0)
摘要:对n较大的排序记录。一般的选择都是时间复杂度为O(nlog2n)的排序方法。 时间复杂度来说: (1)平方阶(O(n2))排序 各类简单排序:直接插入、直接选择和冒泡排序; (2)线性对数阶(O(nlog2n))排序 快速排序、堆排序和归并排序; (3)O(n1+§))排序,§是介于0和1之间的常数 阅读全文
posted @ 2017-02-21 01:12 柳下_MBX 阅读(1478) 评论(0) 推荐(0)
摘要:堆排序 基数排序 桶排序 阅读全文
posted @ 2017-02-20 23:25 柳下_MBX 阅读(225) 评论(0) 推荐(0)
摘要:1. 客户端发起HTTPS请求 这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。 2. 服务端的配置 采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任 阅读全文
posted @ 2017-02-20 19:50 柳下_MBX 阅读(277) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/whatday/article/details/38147103 什么是 HTTPS? HTTPS (基于安全套接字层的超文本传输协议 或者是 HTTP over SSL) 是一个 Netscape 开发的 Web 协议。 你也可以说:HTTPS = 阅读全文
posted @ 2017-02-20 13:03 柳下_MBX 阅读(426) 评论(0) 推荐(0)
摘要:为了使超文本的链接能够高效率地完成,需要用 HTTP 协议来传送一切必须的信息。 从层次的角度看,HTTP 是面向事务的(transaction-oriented)应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。 用户点击鼠标后所发生的事件 1) 浏览器 阅读全文
posted @ 2017-02-20 12:56 柳下_MBX 阅读(265) 评论(0) 推荐(0)
摘要:文件传输协议如今有了很大的广泛,他屏蔽了计算机内部的实现细节,因为可以适用于各种计算机之间文件的传输。 文件咋网络中传输其实是一件很复杂的事情,涉及的问题有很多,比如 (1)计算机存储数据的格式不同 (2)不同的文件和目录命名的格式不同 (3)访问控制方法不同 (4)对于不同的计算机,可能操作的命令 阅读全文
posted @ 2017-02-20 11:14 柳下_MBX 阅读(481) 评论(0) 推荐(0)
摘要:许多应用层软件经常直接使用域名系统 DNS (Domain Name System),但计算机的用户只是间接而不是直接使用域名系统。 因特网采用层次结构的命名树作为主机的名字,并使用分布式的域名系统 DNS。 名字到 IP 地址的解析是由若干个域名服务器程序完成的。域名服务器程序在专设的结点上运行, 阅读全文
posted @ 2017-02-19 23:44 柳下_MBX 阅读(1460) 评论(1) 推荐(0)
摘要:1)OSI七层模型 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示层 数据格式化,代码转换,数据加密 没有协议 会话层 解除或建立与别的接点的联系 没有协议 传输层 提供端对端的接口 阅读全文
posted @ 2017-02-19 20:45 柳下_MBX 阅读(273) 评论(0) 推荐(0)
摘要:一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯。 根域服务器我们知道有13台,但是这是错误的观点。 根域服务器只是具有13个IP地址,但机器数量却不是13台 阅读全文
posted @ 2017-02-19 20:27 柳下_MBX 阅读(1801) 评论(0) 推荐(0)
摘要:转载:http://blog.csdn.net/xiaominkong123/article/details/52120449 电脑上访问一个网页,整个过程是怎么样的:DNS、HTTP、TCP、OSPF、IP、ARP 当在浏览器输入http://www.mytest.com:81/mytest/in 阅读全文
posted @ 2017-02-19 17:34 柳下_MBX 阅读(1645) 评论(0) 推荐(0)
摘要:TCP 有限状态机的图中每一个方框都是 TCP 可能具有的状态。 每个方框中的大写英文字符串是 TCP 标准所使用的 TCP 连接状态名。 状态之间的箭头表示可能发生的状态变迁。 箭头旁边的字,表明引起这种变迁的原因,或表明发生状态变迁后又出现什么动作。 图中有三种不同的箭头。 粗实线箭头表示对客户 阅读全文
posted @ 2017-02-19 17:16 柳下_MBX 阅读(1689) 评论(0) 推荐(0)
摘要:tcp四次挥手详解: 挥手之前,客户端和服务器端都处于建立连接状态,客户端是主动关闭,服务器是被动关闭 (1)首先客户端发送连接释放报文FIN=1,seq=u,主动关闭连接,并不在发送数据。TCP规定FIN报文不能携带数据,但是消耗一个序号,这时A进入FIN_WAIT_1(终止等待1) (2)服务器 阅读全文
posted @ 2017-02-19 17:08 柳下_MBX 阅读(182) 评论(0) 推荐(0)
摘要:首先:客户端和服务器端都处于关闭状态,客户端主动打开,服务器被动打开 (1)服务器创建tcb(传输控制块),等待接收客户端的请求,处于listen状态 (2)客户端也创建tcb(传输控制块)。想服务器发送请求报文段,这是首部的SYN设置为1,同时选择一个初序号x,seq=x,TCP规定SYN报文段( 阅读全文
posted @ 2017-02-19 16:17 柳下_MBX 阅读(261) 评论(0) 推荐(0)
摘要:在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(congestion)。 出现资源拥塞的条件: 对资源需求的总和 > 可用资源 (5-7) 若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。 拥塞控制所 阅读全文
posted @ 2017-02-19 15:10 柳下_MBX 阅读(1633) 评论(1) 推荐(1)
摘要:一般说来,我们总是希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。 流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。 利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制。 A 阅读全文
posted @ 2017-02-19 00:33 柳下_MBX 阅读(381) 评论(0) 推荐(0)
摘要:假设我们讨论A向B发送数据,A端有发送窗口,B端有接受窗口 根据 B 给出的窗口值 A 构造出自己的发送窗口,假如A收到了B的确认报文,此时窗口的值为20,确认序号的值为31,那么接收端会构造出下面的窗口 这里面前后沿可以不动和前移,但是前沿可以后移(不建议) 下面我们讨论发送窗口 (1)发送窗口表 阅读全文
posted @ 2017-02-19 00:03 柳下_MBX 阅读(1169) 评论(0) 推荐(0)
摘要:首部20个字节的的固定部分,40个字节的可选部分 (1)源端口和目的端口 (2)序号(是字节流的编号,0-2^32-1),如果超过了mod2^32 (3)确认号:目的主机希望源主机收到的下一个字节序号 (4)数据偏移(4位)数据部分相对于首部的偏移,以32位4字节为单位,15*4=60字节,也就是2 阅读全文
posted @ 2017-02-18 23:22 柳下_MBX 阅读(488) 评论(0) 推荐(1)
摘要:一、什么是守护进程 Linux服务器在启动时需要启动很多系统服务(其实Windows也这样),它们向本地或网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程(daemons原意精灵)来执行的。 守护进程是生存期很长的一种进程。它们独立于控制终端 阅读全文
posted @ 2017-02-18 19:35 柳下_MBX 阅读(249) 评论(0) 推荐(0)
摘要:维系一个会话,最常见的有两种方式: 一是基于某种凭证,比如web网站的登录会话,在登录验证之后,服务器就会返回一个session id作为凭证。用户之后的请求总是会带上这个id,而服务器通过这个id也就能知道用户是谁。直到用户注销登录、或者登录超时,服务器会清洗掉对应的session id,这个id 阅读全文
posted @ 2017-02-18 18:58 柳下_MBX 阅读(222) 评论(0) 推荐(0)
摘要:进程组就是一个或多个进程的集合,每个进程组都有唯一的进程组ID(整数,也可以存放在pid_t类型中),进程组由进程组ID来唯一标识,进程组ID是一个正整数,用来获得当前进程进程组ID的命令: 用来获得当前进程进程组ID的函数: pid_t getpgid(pid_t pid) pid_t getpg 阅读全文
posted @ 2017-02-18 18:43 柳下_MBX 阅读(454) 评论(0) 推荐(0)
摘要:在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal),控制终端是保存在PCB中的信息,而我们知道fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是这个终端。默认情况下(没有重定向) 阅读全文
posted @ 2017-02-18 12:12 柳下_MBX 阅读(464) 评论(0) 推荐(0)
摘要:TCP主要特点: (1)面向连接 (2)只能是点到点 (3)可靠的传输协议 (4)全双工通信,各自各自的读写缓冲区,应用层吧数据交给发送缓冲区,tcp合适就发送了,接受的时候tcp写入接受缓冲区,应用程序方便的时候就去缓冲区读入数据了 (5)面向可以拆分字节流 TCP的连接 我们说的每一个tcp连接 阅读全文
posted @ 2017-02-18 11:23 柳下_MBX 阅读(416) 评论(0) 推荐(0)
摘要:UDP只在ip数据报的服务上增加了一点功能,就是复用和分用还有差错检验的功能 (1)UDP是面向无连接:发送之前不需要建立连接,减少了时间延续 (2)UDP只是尽最大努力交付,不能保证无措 (3)UDP是面向报文的,就是不可以拆分,对于应用层提交下来的,有多少传多少,但是需要控制,如果太多,向下传入 阅读全文
posted @ 2017-02-18 10:48 柳下_MBX 阅读(2307) 评论(0) 推荐(0)
摘要:运输层位于网际层和应用层之间,属于端到端通信,有两个重要的功能就是复用和分用 复用:发送方不同的进程可以使用运输层同一个协议栈进行输送数据 分用:就是指接收方在收到报文后,抱去首部,可以将这些数据正确的交给对应的应用进程 网络层是为各个主机提供通信的,运输层是为各个应用程序提供逻辑通信的 根据不同的 阅读全文
posted @ 2017-02-18 10:30 柳下_MBX 阅读(809) 评论(0) 推荐(0)
摘要:RIP是一种基于距离向量的路由选择协议 RIP的距离就是指的跳数,没经过一个路由,就是一跳,RIP允许一跳路径最多经过15个路由器,所以16个的话就相当于不可以到达了 RIP协议的特点: 1:仅和相邻的路由进行交换信息, 2:交换的信息只是自己全部知道的信息 3:每隔30s更新一下 RIP协议主要使 阅读全文
posted @ 2017-02-17 23:18 柳下_MBX 阅读(5332) 评论(0) 推荐(0)
摘要:为了更有效的提高ip数据报的成功转发和交付的效率,在网际层使用了icmp网际控制报文协议,这个协议允许主机和路由器提供差错和异常情况的报告,icmp不是高层协议,而是网际层的协议,加在ip数据报中一起发出 ICMP的报文种类有ICMP差错报文和ICMP询问报文: 差错报告报文有5种: (1)终点不可 阅读全文
posted @ 2017-02-17 23:02 柳下_MBX 阅读(2500) 评论(0) 推荐(1)
摘要:SIGCHLD的产生条件 1、子进程终止时 2、子进程接收到SIGSTOP信号停止时 3、子进程处在停止态,接受到SIGCONT后唤醒时 阅读全文
posted @ 2017-02-17 11:54 柳下_MBX 阅读(697) 评论(0) 推荐(0)
摘要:1)头文件:#include <signal.h> 2)一个保护临界区代码的错误实例:(sigprocmask()和pause()实现) 上面实例的问题是:本来期望pause()之后,来SIGINT信号,可以结束程序;可是,如果当“取消阻塞”和“pause”之间,正好来了SIGINT信号,结果程序因 阅读全文
posted @ 2017-02-17 10:43 柳下_MBX 阅读(395) 评论(0) 推荐(0)
摘要:竞态是指设备或系统出现不恰当的执行时序,而得到不正确的结果,由于时间片,或其他因素,导致该到达并响应的信号没有被响应,这就是由信号引起的竞态。 对于上面,因为alarm5秒后悔触发信号,pause收到信号后,会结束挂起,再次之前先输出hello 对于加上sleep(6)则输出hello后一直挂起,因 阅读全文
posted @ 2017-02-17 02:10 柳下_MBX 阅读(338) 评论(0) 推荐(0)
摘要:1、两柱香问题 题目:有两柱不均匀的香,每柱香燃烧完需要1个小时,问:怎样用两柱香切出一个15分钟的时间段?这个题的重点就是怎么切。 解答:将甲香的一头点着,将乙香的两头点着,当乙香燃烧完时,说明已经过了半个小时,同时也说明甲香也正好燃烧了一半,此时,将甲香的另一头点着,从此时起到甲香完全烧完,正好 阅读全文
posted @ 2017-02-17 01:23 柳下_MBX 阅读(523) 评论(0) 推荐(0)
摘要:个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下也不应 阅读全文
posted @ 2017-02-17 01:10 柳下_MBX 阅读(755) 评论(0) 推荐(0)
摘要:要明白信号处理函数的使用,就要先知道信号的捕捉设定,什么时候会调用信号处理函数和其执行的流程是什么,下图完整的展示了信号捕捉的设定,以及信号处理函数的触发机制: 所以,从上图可以知道,只有当程序中断,异常或系统调用,才会进入内核态,也只有进入了内核态才能处理信号,在这里初学者常常有一个误区,他们会觉 阅读全文
posted @ 2017-02-17 00:26 柳下_MBX 阅读(1060) 评论(0) 推荐(0)
摘要:每一个进程都有一个pcb进程控制块,用来控制进程的信息,同时信号在pcb中有两个队列去维护他,一个是未决信号集,每一位对应一个信号的状态,0,1,1表示未决态,另一个是信号屏蔽字(阻塞信号集),也就0,1(1代表阻塞), 用户可以改变阻塞信号集的状态,但是改变不了未决信号集的状态 进程在接触对某个信 阅读全文
posted @ 2017-02-16 23:38 柳下_MBX 阅读(481) 评论(0) 推荐(0)
摘要:三种处理方式 SIG_IGN 忽略 SIG_DFL 默认处理方式 a signal handling function 信号捕捉函数 也就是说在进程中处理信号的行为有三种: 1.默认处理动作 term core ign stop cont 2.忽略 3.捕捉(用户自定义信号处理函数) 阅读全文
posted @ 2017-02-16 22:34 柳下_MBX 阅读(1086) 评论(0) 推荐(0)
摘要:信号是进程间通信方式的一种手段,采用异步通信机制,如果一个进程接收到一个信号,os会中断正在进行的程序流程,任何非原子操作都会被打断,如果进程定义了信号处理函数,那么会执行处理函数,否则执行默认的函数 kill命令: 后32个为实时信号,前32个标准信号,后32个多用于驱动开发 man 7 sign 阅读全文
posted @ 2017-02-16 22:22 柳下_MBX 阅读(277) 评论(0) 推荐(0)
摘要:划分子网在一定程度上缓解了因特网在发展中遇 到的困难。然而在 1992 年因特网仍然面临三个必 须尽早解决的问题,这就是: B 类地址在 1992 年已分配了近一半,眼看就要在 1994 年 3 月全部分配完毕! 因特网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个)。 整个 IPv4 的 阅读全文
posted @ 2017-02-16 21:26 柳下_MBX 阅读(1968) 评论(0) 推荐(0)
摘要:1、从两级IP地址到三级IP地址现在随着因特网的普及和技术的发展,早期ARPANET的设计之缺陷显露无疑:(1)IP地址空间的利用率有时会很低:一个A类IP地址网络可连接超过1000万台主机,而每个B类IP地址网络可连接超过6万台。可是有些网络对连接在网络上的主机数有限制,甚至远小于这样的数量。(2 阅读全文
posted @ 2017-02-16 20:28 柳下_MBX 阅读(2973) 评论(0) 推荐(0)
摘要:ip数据报分首部和数据两部分组成: 首部分为固定部分和可变部分 版本——占 4 位,指 IP 协议的版本 目前的 IP 协议版本号为 4 (即 IPv4) 首部长度——占 4 位,可表示的最大数值 是 15 个单位(一个单位为 4 字节) 因此 IP 的首部长度的最大值是 60 字节。 区分服务—— 阅读全文
posted @ 2017-02-16 12:34 柳下_MBX 阅读(2563) 评论(0) 推荐(0)
摘要:ip地址使用在网络层以上,是一个逻辑地址,物理地址是数据链路层和物理层使用的 在发送数据的时候,数据是从上层往下层发送的,通过tcp报文-》ip数据报-》mac数据帧 IP地址放在数据报的首部,硬件地址放在mac帧的首部,在里面有几点注意 1:在ip层抽象的互联网上只能看到ip数据报。 2:在局域网 阅读全文
posted @ 2017-02-16 12:03 柳下_MBX 阅读(1382) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/malong777/article/details/48974559 weak_ptr是一种不控制对象生存周期的智能指针,它指向一个shared_ptr管理的对象...它不会改变shared_ptr的引用计数——《C++ Primer .5th》。很明 阅读全文
posted @ 2017-02-16 00:51 柳下_MBX 阅读(1232) 评论(0) 推荐(0)
摘要:智能指针和普通指针的区别在于智能指针实际上是对普通指针加了一层封装机制,这样的一层封装机制的目的是为了使得智能指针可以方便的管理一个对象的生命期。智能指针主要是预防不当的析构行为,防止出现悬垂指针。在C++中,我们知道,如果使用普通指针来创建一个指向某个对象的指针,那么在使用完这个对象之后我们需要自 阅读全文
posted @ 2017-02-16 00:32 柳下_MBX 阅读(315) 评论(0) 推荐(0)
摘要:异同: 指针指向的的是一块内存,所以里面存储的是内存的地址,引用是地址的别名,所以他们本质上都是存着一块内存的地址去操作内存 但是有跟多不同的地方 1:指针可以有const类型,但是引用没有 2:指针式一个实体,引用只是一个别名 3:安全性问题:指针可以定义的时候不赋值,应用必须赋值,指针可以多次修 阅读全文
posted @ 2017-02-15 19:47 柳下_MBX 阅读(179) 评论(0) 推荐(0)
摘要:两者主要区别 1:sizeof是类型,而strlen是函数 2:sizeof如果是对类型求解,那么必须加括号,对变量的话,可以不加括号,strlen是函数,所以必须加括号 3:sizeof的参数不对退化,strlen的参数退化为指针 4:sizeof在编译的时候就将值求出来了,strlen实在运行处 阅读全文
posted @ 2017-02-15 15:07 柳下_MBX 阅读(137) 评论(0) 推荐(0)
摘要:int b; const int *a=&b; int const * a=&b; int * const a =&b; const int *const a=&b; 前两种都是一样的效果,都表示指针指向常量,*a=10这样做是不可的,因为指向的是一个常量,但是我们有两种方式改变*a的值 (1)b= 阅读全文
posted @ 2017-02-15 02:21 柳下_MBX 阅读(197) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2017-02-15 02:13 柳下_MBX 阅读(125) 评论(0) 推荐(0)
摘要:1:在c中,const不是常量,他只能说是一个不能改变的变量(注意是变量),而且数组的下标必须是常量,不能是变量。c编译器不能把const看成看成一个编译期间的常量,因为他在内存中有分配,c编译器不知道他在编译期间的值。 2:在c中,const int a;是可以的,因为这只是声明一个变量,告诉编译 阅读全文
posted @ 2017-02-15 01:38 柳下_MBX 阅读(582) 评论(0) 推荐(0)
摘要:分段连续 阅读全文
posted @ 2017-02-15 00:59 柳下_MBX 阅读(138) 评论(0) 推荐(0)
摘要:来源摘取自百度百科 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段,在RFC 213 阅读全文
posted @ 2017-02-14 12:42 柳下_MBX 阅读(275) 评论(0) 推荐(0)
摘要:一、IP分类 点分十进制数表示的IPv4 地址分成几类,以适应大型、中型、小型的网络。这些类的不同之处在于用于表示网络的位数与用于表示主机的位数之间的差别。IP地址分成五类,用字母表示: A 类地址 B 类地址 C 类地址 D 类地址 E 类地址 每一个IP地址包括两部分:网络地址和主机地址,上面五 阅读全文
posted @ 2017-02-13 13:02 柳下_MBX 阅读(589) 评论(0) 推荐(0)
摘要:c++中对new申请的内存的释放方式有delete和delete[两种方式,到底这两者有什么区别呢? 1.我们通常从教科书上看到这样的说明:delete 释放new分配的单个对象指针指向的内存delete[] 释放new分配的对象数组指针指向的内存那么,按照教科书的理解,我们看下下面的代码:int 阅读全文
posted @ 2017-02-13 09:28 柳下_MBX 阅读(319) 评论(0) 推荐(0)
摘要:剑指offer里面提到,如果让写一个重载运算符函数需要注意的4个事项 1:返回值一定要是引用,也就是自身*this,这样才能保证连续赋值 2::形参要是引用不能是实例,否则会自身调用复制构造函数,造成浪费,减慢效率,同时为了不修改,应该const 修饰 3:在分配内存之前要释放以前的内存 4:最初一 阅读全文
posted @ 2017-02-12 23:06 柳下_MBX 阅读(332) 评论(0) 推荐(0)
摘要:GDB是一个功能强大的调试器,它是一个自由软件,能够用在许多UNIX平台上。它同时也是Linux系统中的默认调试器。GDB已被移植到许多其他的计算机平台上,并且能够用于调试嵌入式实时系统。一般来说,GDB主要可以帮助我们完成以下四个方面的功能: 1, 启动你的程序,可以按照你的自定义的要求随心所欲的 阅读全文
posted @ 2017-02-12 21:25 柳下_MBX 阅读(543) 评论(0) 推荐(0)
摘要:vector身为一个动态数组,每次以空间不够的时候会以2倍的倍数增加,而且每次扩充的时候分为3部,分配内存,拷贝数据,释放内存 vector内部有两个成员变量,begin,finish ,endcatagory,分别指向数据头尾合容器末尾,相应的内部成员的内部实现也都是通过这3个类成员 看下面额ve 阅读全文
posted @ 2017-02-12 20:49 柳下_MBX 阅读(1024) 评论(0) 推荐(0)
摘要:iterator我前面写过是作为algorithm和container之间的一个桥梁,algorithm进程操作的时候向iterator进行提问,iterator并对提问进行了回答,其中主要就是回答5个特性 1:iterator_category:迭代器移动性质,比如说有的迭代器只能向前移动++。有 阅读全文
posted @ 2017-02-12 20:40 柳下_MBX 阅读(339) 评论(0) 推荐(0)
摘要:僵尸进程:子进程终止了,但是父进程没有回收子进程的资源PCB。使其成为僵尸进程 孤儿进程:父进程先与子进程结束了,使得子进程失去了父进程,这个时候子进程会被1号进程init进程领养,成为孤儿进程 为了防止上面两种情况,我们应当在父进程结束之前一定要回收子进程的所有资源 所以出现了wait和waitp 阅读全文
posted @ 2017-02-12 12:01 柳下_MBX 阅读(3870) 评论(2) 推荐(1)
摘要:IPC三种通信机制是指:信号量、共享内存、消息队列, 信号量:通过操作系统中的PV操作来实现; 共享内存:申请一块内存,进程A往共享内存中写,其他的进程就可以通过读出共享内存中的内容来获取进程A所传送的信息; 消息队列:创建一个消息队列,进程A往队列里面写,那么进程B通过读队列中的容来获取进程A传送 阅读全文
posted @ 2017-02-12 11:00 柳下_MBX 阅读(2120) 评论(0) 推荐(0)
摘要:上一篇博客已经介绍了一种进程间通信的方式,但是那只是针对于有血缘关系的进程,即父子进程间的通信,那对于没有血缘关系的进程,那要怎么通信呢? 这就要创建一个有名管道,来解决无血缘关系的进程通信, fifo: mkfifo 既有命令也有函数 注: 当只写打开FIFO管道时,该FIFO没有读端打开,则op 阅读全文
posted @ 2017-02-12 10:36 柳下_MBX 阅读(360) 评论(0) 推荐(0)
摘要:在实际开发过程中,程序员必须让拥有依赖关系的进程集协调,这样才能达到进程的共同目标。 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核 阅读全文
posted @ 2017-02-12 00:41 柳下_MBX 阅读(781) 评论(0) 推荐(0)
摘要:转载自:http://blog.csdn.net/ruglcc/article/details/7814546/ 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,make 阅读全文
posted @ 2017-02-11 20:59 柳下_MBX 阅读(320) 评论(0) 推荐(0)
摘要:#第一阶段:了解三要素 #(目标):依赖条件 #(命令) #all:add.c sub.c mul.c dev.c main.c # gcc add.c sub.c mul.c dev.c main.c -o app #第二阶段:了解工作原理。自顶向下建立依赖,自下向上执行命令 #app:add.o sub.o mul.o dev.o main.o # gcc add.o sub... 阅读全文
posted @ 2017-02-11 20:48 柳下_MBX 阅读(131) 评论(0) 推荐(0)
摘要:首先声明,下面的讲解都是针对GCC2.9,std::alloc 通过下面的源代码大家可以看到list类的内部成员是一个node,而他的类型是linktype,前面的typedef里面有介绍是一个指针,所以,当我们创建一个对象的时候,他的大小是4,只有一个指针,而listnode是一个结构体,void 阅读全文
posted @ 2017-02-11 19:42 柳下_MBX 阅读(1947) 评论(0) 推荐(0)
摘要:我们在c++中创建数组通常使用new来分配我们需要的内存大小,之后通过delete进行释放内存 但是我们调用new的时候,通过调用的是operator new,二operator new调用的是malloc,所以我们说new的本质其实就是malloc,只不过我们看不到而已,同样,delete调用op 阅读全文
posted @ 2017-02-11 17:54 柳下_MBX 阅读(509) 评论(0) 推荐(0)
摘要:OOP面向对象编程 GP泛型编程(generic programming) 两者的主要区别就是OOP将数据和对数据的操作放在一起, GP就是将数据和操作独立开来 GP: 数据就是container进行存储,操作就是函数,也就是最数据操作的算法,container和algorithn都可以各自闭门造车 阅读全文
posted @ 2017-02-11 13:21 柳下_MBX 阅读(340) 评论(0) 推荐(0)
摘要:从上面这个程序可以看出,我们这里手动使用了分配器,分配器有很多种类,有std::,还有非std::,也就是上面的__gnu_cxx下面的,我们在使用容器的时候不关心我们使用什么分配器,也不关心我们如何分配内存,分配多大的内存,这些事os自己的事情,当然我们也可以指定我们使用什么分配器,为我们的容器指 阅读全文
posted @ 2017-02-11 11:52 柳下_MBX 阅读(244) 评论(0) 推荐(0)
摘要:multiset(RB-TREE) multimap(RB-TREE) unordered_multiset(HASH_TABLE) unordered_multimap(HASH_TABLE) 阅读全文
posted @ 2017-02-11 11:17 柳下_MBX 阅读(196) 评论(0) 推荐(0)
摘要:vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase( iterator _Where); 1.iterator erase( iterator _First, iterator _La 阅读全文
posted @ 2017-02-10 22:55 柳下_MBX 阅读(562) 评论(0) 推荐(0)
摘要:例子需要包含头文件 #include <vector> #include <algorithm> #include <functional> bind1st和bind2nd函数用于将一个二元函数对象(binary functor,bf)转换成一元函数对象(unary functor,uf)。为了达到 阅读全文
posted @ 2017-02-10 22:26 柳下_MBX 阅读(342) 评论(0) 推荐(0)
摘要:当将arr。ereas注释保留 remove_if()类似于partition(), 但有两点不同: 1) 它们使用的谓词条件刚好相反. 2) remove_if只强调前面部分(第二部分不再需要了)remove_if()以线性时间(linear time)运行.remove_if()不能用于关联容器 阅读全文
posted @ 2017-02-10 22:18 柳下_MBX 阅读(585) 评论(0) 推荐(0)
摘要:stl具有上面6大部件 容器是存储数据的,原理主要是模板,容器只是负责存储数据,并不关心内存的存储情况,所以出现了分配器,分配器主要是负责为容器分配内存的,对于数据的操作被封装为一个个函数,也就是算法,算法就是利用一些数据结构实现对数据的各种操作,算法和容器的连接就是通过迭代器实现的,迭代器实质就是 阅读全文
posted @ 2017-02-10 13:04 柳下_MBX 阅读(488) 评论(0) 推荐(0)
摘要:在之前我们已经知道用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该 阅读全文
posted @ 2017-02-10 10:53 柳下_MBX 阅读(228) 评论(0) 推荐(0)
摘要:我们知道怎么通过fork函数创建(或者说是复制)一个进程,但是我们要怎么样操作这个被创建出来的进程呢?那就需要用到他的进程id,所以就要获取进程id,一下提供一些获取进程id的函数和其使用方法。 1)getpid和gteppid s 输出结果: this is a testI am parentpa 阅读全文
posted @ 2017-02-10 09:38 柳下_MBX 阅读(248) 评论(0) 推荐(0)
摘要:进程环境 libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明。例如: #include <stdio.h>int main(void){ extern char **environ; int i; for(i=0; envir 阅读全文
posted @ 2017-02-10 08:48 柳下_MBX 阅读(221) 评论(0) 推荐(0)
摘要:什么是进程? 一个进程是一个程序的一次执行的过程。它和程序不同,程序是静态的,它是一些保存在磁盘上的可执行的代码和数据集合;而进程是一个动态的概念,也是操作系统分配资源的最小单位。 我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_st 阅读全文
posted @ 2017-02-10 00:12 柳下_MBX 阅读(191) 评论(0) 推荐(0)
摘要:Linux支持各种各样的文件系统格式,如ext2、ext3、reiserfs、FAT、NTFS、iso9660等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式,然而这些文件系统都可以mount到某个目录下,使我们看到一个统一的目录树,各种文件系统上的目录和文件我们用ls命令看起来是一样 阅读全文
posted @ 2017-02-09 23:14 柳下_MBX 阅读(238) 评论(0) 推荐(0)
摘要:chmod 头函数: #include < sys/stat.h> 函数定义: int chmod(const char *path, mode_t mode); int fchmod(int fd, mode_t mode); 函数说明: chmod()会依参数mode 权限来更改参数path 指 阅读全文
posted @ 2017-02-09 22:45 柳下_MBX 阅读(247) 评论(0) 推荐(0)
摘要:stat命令 stat既有命令也有同名函数,用来获取文件Inode里主要信息,所以stat命令的输出信息比ls命令的输出信息要更详细,stat 跟踪符号链接,lstat不跟踪符号链接,其中会输出对应文件的文件名(File)、文件大小(Size)、占用物理扇区数(Blocks)、系统块大小(IO Bl 阅读全文
posted @ 2017-02-09 21:54 柳下_MBX 阅读(2043) 评论(0) 推荐(0)
摘要:一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例如某种mkfs命令)格式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写一些管理存储布局的信息。下图是一个磁盘分区格式化成ext2文件系统后的存储布局: 文件系统中存储的最小单位是块(Block),一个块究竟多大是在格式化时 阅读全文
posted @ 2017-02-09 21:17 柳下_MBX 阅读(368) 评论(0) 推荐(0)
摘要:lseek : 每个打开的文件都记录着当前读写位置,打开文件时读写位置是0,表示文件开头,通常读写多少个字节就会将读写位置往后移多少个字节。但是有一个例外,如果以O_APPEND方式打开,每次写操作都会在文件末尾追加数据,然后将读写位置移到新的文件末尾。lseek和标准I/O库的fseek函数类似, 阅读全文
posted @ 2017-02-09 19:39 柳下_MBX 阅读(447) 评论(0) 推荐(0)
摘要:#define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #define ESRCH 3 /* No such process */ #define EINTR 4 /* Interrupted system call */ #define EIO ... 阅读全文
posted @ 2017-02-09 19:06 柳下_MBX 阅读(222) 评论(0) 推荐(0)
摘要:读常规文件是不会阻塞的,不管读多少字节,read一定会在有限的时间内返回。但是从终端设备或网络读则不一定,如果从终端输入的数据没有换行符,调用read读终端设备就会阻塞,如果网络上没有接收到数据包,调用read从网络读就会阻塞,至于会阻塞多长时间也是不确定的,如果一直没有数据到达就一直阻塞在那里。同 阅读全文
posted @ 2017-02-09 19:05 柳下_MBX 阅读(323) 评论(0) 推荐(0)
摘要:一、read函数 read函数从打开的设备或文件中读取数据。 #include <unistd.h>ssize_t read(int fd, void *buf, size_t count);返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次rea 阅读全文
posted @ 2017-02-09 17:48 柳下_MBX 阅读(397) 评论(0) 推荐(0)
摘要:一:open open函数可以打开或创建一个文件。 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const ch 阅读全文
posted @ 2017-02-09 11:45 柳下_MBX 阅读(459) 评论(0) 推荐(0)
摘要:一: 在linux下,fwrite和fread都是对一个file*(文件流指针)进行操作,这个指针指向一个文件流缓冲区,默认大小所所所所是是8192byte 在读写的过程中,如果读10个字符,一个都读完或者是1次读取一个1个读10次,哪一种效率比较高,当然是前一种,这涉及到硬件性能的知识,我们在读取 阅读全文
posted @ 2017-02-09 11:26 柳下_MBX 阅读(188) 评论(0) 推荐(0)
摘要:转载&&增加: 我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期的代码维护。我们可以把他们制作成相应的功能函数,使用时直接调用就会很方便,还可以进行后期的功能升级。 例如我要在一段代码中多次 阅读全文
posted @ 2017-02-09 08:57 柳下_MBX 阅读(316) 评论(0) 推荐(0)
摘要:1:压缩 tar cvf(c)归档 v(列出详细信息) f 使用文档必要设备 z指的是压缩算法,.gz表示就是gzip也就是使用z算法生成的压缩文件 tar zxvf name.tar.gz表示解压缩 除此之外,还有bz2算法 tar jcvf name.name.bz2: 2查找 find本身自带 阅读全文
posted @ 2017-02-09 00:16 柳下_MBX 阅读(207) 评论(0) 推荐(0)