自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (1)
  • 收藏
  • 关注

原创 套接字选项

一 获取和设置套接字相关选项的函数:(1)仅适用于套接字:getsockopt和setsockopt。格式:*int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen);*int setsockopt(int sockfd,int level,int optname,const vo

2013-05-31 12:24:02 868

原创 文件逻辑结构、外存分配和空闲空间管理

一 文件的逻辑结构(组织方式):(1)顺序文件:所有记录具有相同长度,并且由相同数目、长度固定的域按照特定的顺序组成(记录按关键字排序)。*优点:通常用于批处理文件,即每次读或写一大批记录,顺序文件是最佳的;只有顺序文件才能存储在磁带上。*缺点:对于查询或更新记录的交互式应用,顺序文件性能很差(在访问时,为了匹配关键字,需要顺序查找文件);增加或删除一个记录比较困难。(2)

2013-05-30 09:49:20 4215

原创 RAID:独立磁盘冗余阵列

一 RAID思想:(1)RAID策略:用多个小容器磁盘驱动器代替大容量磁盘驱动器,并且以这种方式分布数据,使得能够同时从多个驱动器访问数据,因而提高了I/O的性能,并能够更容易地增加容量。(2)RAID优点:*改善数据读写速度(磁盘操作可并行执行);*改善数据存储的可靠性(可在磁盘上存储冗余信息,一个磁盘损坏不会导致数据丢失);二 RAID(Redundant

2013-05-29 13:30:10 946

原创 linux中错误类型和处理

一 概述:(1)UNIX函数出错时,常常返回一个负值,而且整形变量errno通常被设置为含有附加信息的一个值(线程函数除外)。*线程的处理:线程相关函数(e.g.pthread_create),出错时通常返回错误码,不设置errno变量。Pthread中的函数通过返回值来表示错误状态,而不是用errno变量,但发生错误时,函数返回一个包含在中的错误代码。Pthread没有像perror函数

2013-05-28 10:55:20 1138

原创 磁盘调度策略

一 磁盘访问时间:*磁盘访问时间=寻道时间+旋转延迟时间+数据传输时间。主要是寻道时间。二 磁盘调度策略:(1)先来先服务(FCFS):*优点:公平、简单,且每个进程的请求都得到依次的处理,不会出现某一进程的请求长期得不到满足。*缺点:未对寻道进行优化,使平均寻到时间可能较长。(2)最短寻道时间优先(SSTF):*特点:要求访问的磁道与当前磁头所

2013-05-28 10:11:26 2408

原创 虚拟内存的置换策略

一 置换策略:必须读取一个新页时,应该置换内存中的哪一页。二 置换策略分类:(1)最佳置换算法(OPT):选择置换下次访问距离当前时间最长的那些页。*该算法导致最少的缺页中断,但由于无法预知一个进程在内存的若干个页面哪个是未来最长时间不再被访问的,因而该算法无法实现,但是可以作为一种标准来衡量其他置换算法。(2)最近最久未使用算法(LRU:Least Recentl

2013-05-28 10:04:19 1786

原创 Effective C++(二)构造、析构和赋值操作

条款5 :了解C++默认生成并调用哪些函数。1)编译器在编译器需要的情况下会自动为class创建default构造函数、copy构造函数、copy assignment操作符以及析构函数,自动生成的函数为public而且inline。(注意:不是任何class没有定义这些函数,编译器都会自动生成)。2)编译器生成的这些函数只满足编译器的需要而不是程序的需要。条款6 :若不想使用

2013-05-27 14:35:59 851

原创 linux中别名:alias和unalias

一 系统定义的别名:*通常情况下,系统中已经定义了一些命令别名,要查看已经定义的命令别名,可以使用alias命令查看。二 用户自定义别名:(1)格式:alias command='...'。*例如:alias aaaa='ps -A'.三 删除别名(unalias):*格式:unalias command。例如:unalias aaaa.

2013-05-26 22:25:27 887

原创 shell中函数和库

一 shell执行搜索命令的顺序:(1)顺序(先后):*别名:即使用alias command='...'创建的命令。*关键字*函数*内置命令:如cd,pwd等命令。*外部命令:脚本或可执行程序,在PATH路径中查找。(2)type命令:查看执行的命令的来源是别名、函数或外部命令等。二 函数:(1)函数的定义格式:*function funcname

2013-05-26 20:35:44 778

原创 linux下终端快捷键

一 linux下终端快捷键:Alt+Ctrl+W:新建终端Shift+Ctrl+T:新建标签页Shift+Ctrl+N:新建窗口Shift+Ctrl+Q:关闭终端Shift+Ctrl+W:关闭标签页Ctrl+PageUp:前一标签页Ctrl+PageDown:后一标签页Shift+Ctrl+PageUp:标签页左移Shift+Ctrl+PageD

2013-05-26 20:17:57 889

原创 I/O复用:select、poll、pselect和epoll

一 I/O模型:(1)阻塞式I/O:最常用的I/O模型。默认情况下,所有套接字都是阻塞的。(2)非阻塞式I/O:不把进程投入睡眠,而是返回一个错误。(3)I/O复用:调用select或poll,阻塞在这两个系统调用中的某一个之上,而不是阻塞在真正的I/O系统调用上。(4)信号驱动I/O:让内核在描述符就绪时发信号通知进程。优势:等待数据到达期间进程不被阻塞。(5)异步I/O:告

2013-05-25 21:13:47 1956

原创 Effective C++(一)让自己习惯C++

条款1:视C++为一个语言联邦。(1)C++是四个次语言组成的联邦,每个语言都有自己的规约。当从一个次语言移往到另一个次次语言,守则可能要改变。(2)C++共有四个次语言组成:*C。*Object-oriented C++。*Template C++。*STL。条款2:尽量以const,enum,inline替换#define。(1)对于单纯常量,最好以co

2013-05-25 20:24:12 795

原创 gdb(一)概述

一 GDB的主要功能(man gdb):www.gnu.org/software/gdb/1)启动你的程序,可以按照你的自定义要求运行程序。2)使你的程序在特定条件下停止。3)当程序停止时,检测发送什么事情。4)Change  things  in your program, so you can experiment with correcting the effects of

2013-05-24 16:07:14 916

原创 C++智能指针:auto_ptr、shared_ptr、weak_ptr等

一 C++对含有指针成员的类的处理:(1)指针成员采取常规指针型行为。这样的类具有指针的所有缺陷(比如:悬挂指针)但无需特殊的复制控制。(2)类可以实现“智能指针”行为。指针所指的对象是共享的,但类能够防止悬挂指针。(引用计数)*智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与

2013-05-23 21:37:09 1210

原创 预处理(三)条件编译

待续...

2013-05-22 10:52:16 872

原创 typedef

一 typedef概述:typedef定义以关键字typedef开始,后面是数据类型和标识符。标识符或类型名并没有引入新的类型,而只是现有数据类型的同义词。typedef类型名可以出现程序中类型名可出现的任何位置。二 typedef的用途:(1)三 typedef与#define的区别:(1)typedef是关键字,#define是预处理指令。

2013-05-22 10:30:36 569

原创 预处理(二)#define宏替换

一 宏替换:*宏定义有两种形式:取决于被定义的宏名后面是否紧随一个左括号。(1)#define 宏名 替换文本:最简单的宏替换。*后续所有出现宏名的地方都将被替换为替换文本。*#define中名字与变量名的命名方式相同,替换文本可以是任意字符串。*通常#define指令占一行,替换文本是#define指令行尾部的所有剩余部分内容,也可以把一个较长的宏定义分成若干行,这时

2013-05-22 09:42:24 2088

原创 预处理(一)#include文件包含

一 include的两种形式:(1) #include:搜索顺序为:①先搜索-I指定的目录②然后搜索gcc的环境变量CPLUS_INCLUDE_PATH③最后搜索gcc的内定目录:/usr/include/usr/local/include...等目录(2) #include“头文件”:

2013-05-22 09:42:00 896

原创 UDP

#ifndef __NETINET_UDP_H#define __NETINET_UDP_H    1#include #include /* UDP header as specified by RFC 768, August 1980. */#ifdef __FAVOR_BSDstruct udphdr{  u_int16_t uh_sport;

2013-05-22 08:47:08 1013

原创 TCP

* *    @(#)tcp.h    8.1 (Berkeley) 6/10/93 */#ifndef _NETINET_TCP_H#define _NETINET_TCP_H    1#include /* * User-settable options (used with setsockopt). */#define    TCP_NODEL

2013-05-22 08:46:35 1193

原创 IGMP(igmp.h)

/* Copyright (C) 1997, 1999, 2003 Free Software Foundation, Inc.   This file is part of the GNU C Library.   The GNU C Library is free software; you can redistribute it and/or   modify it unde

2013-05-22 08:45:59 1171

原创 ICMP(ip_icmp.h)

#ifndef __NETINET_IP_ICMP_H#define __NETINET_IP_ICMP_H    1#include #include __BEGIN_DECLSstruct icmphdr{  u_int8_t type;        /* message type */  u_int8_t code;        /* type

2013-05-22 08:44:53 3606

原创 IP(ip.h)

#ifndef __NETINET_IP_H#define __NETINET_IP_H 1#include #include #include __BEGIN_DECLSstruct timestamp  {    u_int8_t len;    u_int8_t ptr;#if __BYTE_ORDER == __LITTLE_ENDI

2013-05-22 08:43:44 2403

原创 arp和rarp

/* ARP protocol opcodes. */#define    ARPOP_REQUEST    1        /* ARP request.  */#define    ARPOP_REPLY    2        /* ARP reply.  */#define    ARPOP_RREQUEST    3        /* RARP request.  */

2013-05-22 08:42:14 1636

原创 以太网(ethernet.h)

#ifndef __NET_ETHERNET_H#define __NET_ETHERNET_H 1#include #include #include      /* IEEE 802.3 Ethernet constants */__BEGIN_DECLS/* This is a name for the 48 bit ethernet address av

2013-05-22 08:35:36 4398

原创 linux文件系统概述

待续...

2013-05-20 16:45:08 551

原创 shift和getopts

一 shift用法:(1)功能:用来处理命令行参数时,一次向左位移一位(更多位)。(2)格式:shift n。默认shift为shift 1:$1的值消失,以$2的旧值来取代$1,依次类推。$#的值也会依次减少。二 getopts:简化选项处理。(1)格式:getopts option_spec variable [arguments]*第一个参数:option_sep

2013-05-20 16:29:29 896

原创 shell循环:for循环、while循环、until循环和select循环

一 for循环:(1)功能:*for循环:用于重复整个对象列表,依次执行每一个独立对象的循环内容。对象可以是命令行参数、文件名或是任何可以以列表格式建立的东西。(2)语法:#省略in list则循环遍历整个命令行参数。for name [ in list ]do...done例如:#打印出当前目录下的所有文件。反单引号``,表示执行中间的命令,引用结

2013-05-17 19:55:10 1188

原创 shell中的if语句和case语句

一 if语句:(1)语法:if pipeline [pipeline ...]thenstatements-if-true-1[elif pipeline] [pipeline ...]then statements-if-true-2[elsestatements-if-all-else-fails]fi*例如:if grep patter

2013-05-17 19:30:33 1186

原创 test命令和[...]

一 退出状态:*每一条命令,不管是内置、Shell函数,还是外部的,当它退出时,都会返回一个小的整数值给引用它的程序,即退出状态。*退出状态为0表示“成功”;其他任何退出状态都为失败。内置变量“#?”包括了Shell最后一次执行的一个程序的退出状态。二 test命令:输出是退出状态。(1)语法:(两种形式,注意空格)*test [ expression ]*[ [

2013-05-17 19:07:54 758

原创 死锁

一 概述:(1)死锁定义:当一组进程的每个进程都在等待某个事件(典型情况是等待所请求的资源释放),而只有在这组进程中的其他被阻塞的进程才能出发该事件。*死锁原因归结为两点:竞争资源;进程间推进顺序非法。(2)资源的分类:*可重用资源:指一次只能供一个进程安全地使用,并且不会由于使用而耗尽的资源。可重用资源包括:处理器、I/O通道、设备等。*可消耗资源(又称临时资源):指可以被创

2013-05-17 13:36:28 920

原创 共享内存区

一 概述:*共享内存区是最快的IPC形式。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传递就不在涉及内核,然而往该内存区存放信息或从中取走信息的进程间需要同步。*无亲缘关系进程间共享内存区的两种方法:1.内存映射文件(父子进程或无亲缘关系都可):由open函数打开,由mmap函数把得到的描述符映射到当前进程地址空间的一个文件。2.共享内存区对象:由shm_open

2013-05-16 13:41:09 948

原创 select、poll和epoll

待续...

2013-05-14 10:48:09 646

原创 进程调度

一 处理器调度类型:(1)长程调度(又称作业调度):决定是否把进程添加到当前活跃的进程集合中。决定哪个程序可以进入系统处理,因此,控制系统并发度。*系统并发度:可处于等待处理器执行的进程的个数。(2)中程调度:是交换功能的一部分,决定是否把进程添加到那些至少部分在内存中并且可以被执行的集合中。主要目的提高内存利用率和系统吞吐量。(3)短程调度(即进程调度):决定下一次执行哪一个就绪

2013-05-14 10:23:57 1181

原创 线程实时调度

待续...

2013-05-13 20:13:00 722

原创 系统限制:sysconf

NAME       sysconf - Get configuration information at runtimeSYNOPSIS       #include        long sysconf(int name);DESCRIPTION       POSIX allows an application to test at compil

2013-05-13 16:46:13 833

原创 进程与信号、线程与信号

待续...

2013-05-13 16:23:25 924

原创 线程与IO

待续...

2013-05-13 16:23:03 698

原创 线程私有数据

线程私有数据的作用?线程私有数据的实现?一 概述:(1)线程私有数据(Thread-specific data,TSD):存储和查询与某个线程相关数据的一种机制。*在进程内的所有线程都共享相同的地址空间,即意味着任何声明为静态或外部变量,或在进程堆声明的变量,都可以被进程内所有的线程读写。*一个线程真正拥有的唯一私有存储是处理器寄存器,栈在“主人”故意暴露给其他线程时也

2013-05-13 08:56:31 956

原创 线程池

一 线程池(选自:操作系统概念 第7版):线程的来源:需要时创建和线程池。(1)多线程服务器潜在的问题:*第一个问题:处理请求之前用以创建线程的时间,以及线程完成工作之后就要被丢弃这一事实。*第二个问题:如果允许所有并发请求都通过新线程来处理,那么将没法限制在系统中并发执行的线程的数量。无限制的线程会耗尽系统资源(如:CPU和内存),解决方法使用线程池。(2)主要思想:

2013-05-12 19:33:04 810

深度探索c++对象模型

深度探索c++对象模型

2013-02-28

空空如也

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

TA关注的人

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