- 博客(33)
- 资源 (19)
- 收藏
- 关注
原创 两种高效的服务器设计模型:Reactor和Proactor模型
I/O模型在文章《unix网络编程》(12)五种I/O模型中提到了五种I/O模型,其中前四种:阻塞模型、非阻塞模型、信号驱动模型、I/O复用模型都是同步模型;还有一种是异步模型。Reactor模型 Reactor模式是处理并发I/O比较常见的一种模式,用于同步I/O,中心思想是将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程/进程阻塞在多路复用
2015-05-30 18:25:14 27669 2
原创 进程同步和线程同步
怎样同步多个线程或多个进程的活动。为允许在线程或进程间共享数据,同步是必需的。 互斥锁和条件变量是同步的基本组成部分。互斥锁和条件变量出自POSIX.1线程标准,它们总是可用来同步一个进程内的各个线程的。如果一个互斥锁或条件变量存放在多个进程间共享的某个内存中,那么POSIX还允许它用于这些进程间的同步。互斥锁、条件变量、读写锁、信号量均可用于进程、线程的同步。多线
2015-05-30 09:53:15 6093
原创 UNIX域协议
文章参考UNP,例子也来源于该书。 Unix域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所使用的API就是在不同主机上执行客户/服务器通信所用的API(套接字API)。 Unix域套接字仅仅复制数据,并不执行协议处理,不需要添加或删除网络报头,无需计算校验和,不要产生顺序号,无需发送确认报文。Unix域套接字提供流和数据报两种接口。Unix
2015-05-29 10:13:12 1487
原创 进程通信方式:共享内存区
本文主要参考《unix网络编程卷2:进程间通信》另外可以参考以下文章:mmap:Linux环境进程间通信(五): 共享内存(上)System V共享内存: Linux环境进程间通信(五): 共享内存(下) 共享内存区是可用IPC方式中最快的。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据传递就不再涉及内核(这里的“不再涉及内核”
2015-05-28 09:49:50 3159
原创 Linux进程间通信IPC的几种方式简介
Linux进程通信的源头 linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T(原为American Telephone & Telegraph的缩写,也是中文译名美国电话电报公司由来)的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段
2015-05-27 19:58:11 7350
原创 可重入函数
使用可重入函数进行更安全的信号处理http://blog.csdn.net/yueyahe/article/details/729126可重入性 在早期的编程中,不可重入性对程序员并不构成威胁;函数不会有并发访问,也没有中断。在很多较老的 C 语言实现中,函数被认为是在单线程进程的环境中运行。不过,现在,并发编程已普遍使用,您需要意识到这个缺陷。本文描
2015-05-27 15:07:04 1002
转载 可靠信号与不可靠信号
来自:http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html一、信号及信号来源信号本质 信号是软件中断,是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知
2015-05-25 21:13:52 9163 1
原创 linux软链接和硬链接
1、概述 硬链接(hard link)与软链接(symbolic link)是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux 虚拟文件系统 (VFS,参考文章Linux 文件系统剖析) 的四个基本概念之一。2、硬链接和软链接硬链接 硬链接是通过索引节点
2015-05-24 15:27:28 1859
原创 setjmp和longjmp函数
setjmp和longjmp的用途 在C中,goto语句是不能跨函数的,而执行这类跳转功能的函数是setjmp和longjmp。这两个函数对于处理发生在深层嵌套函数调用中的出错情况是非常有用的。非局部指的是,这不是(注意:这两个函数无法在一个函数内部跳转,是针对函数间的跳转)类似goto语句在一个函数内实施的跳转,而是在栈上跳过若干调用帧,返回到当前函数调用路径上的一个函数
2015-05-23 08:53:13 1935
原创 C语言volatile关键字
在学习setjmp和longjmp函数时涉及到了volatile关键字。volatile关键字是什么作用?为什么要设置该关键字?转自: http://blog.csdn.net/tigerjibo/article/details/7427366一.前言1.编译器优化介绍: 硬件级别优化:由于内存访问速度远不及CPU处理速度,为提高机器整
2015-05-22 16:58:57 1276
原创 typedef和#define
在C语言中,关键字typedef用来为现有数据类型创建一个别名,而不是用来创建一个新的数据类型。typedef的用法简单的例子#include typedef int type_int;int main(void){ type_int a = 0x10203040; short b = a; printf("a = 0x%x, b = 0x%x\n", a
2015-05-22 09:48:50 1112
原创 do{...}while(0)的意义和用法
libnids中的两个宏如下是libnids中定义的两个宏,这两个宏都包含了多个语句,看起来很复杂的样子。这两个宏定义其实是有潜藏的问题的,具体看本文第二部分中的“辅助定义复杂的宏,避免引用的时候出错”。#define START_CAP_QUEUE_PROCESS_THREAD() \ if(nids_params.multiproc) { /* threading... */ \
2015-05-21 21:39:34 1294
原创 linux静态库和共享库
这篇文章不错:http://blog.chinaunix.net/uid-26833883-id-3219335.html静态库 这类库的名字一般是libxxx.a优点:编译后的执行程序不需要外部的函数库支持,因为整个函数库的所有数据都被整合进目标代码中,所有使用的函数都已经被编译进可执行文件了。缺点:(1)利用静态函数库编译成的文件比较大,因为整个函数
2015-05-20 20:17:19 1948
原创 多线程:常见题目
1、线程基本概念、线程状态 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。 线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源(线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量、线程私有数据); 它可与同属一个进程的其它线程共享进程所拥有的全部
2015-05-18 19:52:03 1991
原创 sendfile: Linux中的"零拷贝"
译文:http://blog.csdn.net/caianye/article/details/7576198原文:http://www.linuxjournal.com/article/6345如今几乎每个人都听说过Linux中所谓的"零拷贝"特性,然而我经常碰到没有充分理解这个问题的人们。因此,我决定写一些文章略微深入的讲述这个问题,希望能将这个有用的特性解释清楚。在本文中
2015-05-18 14:50:47 2509
转载 Linux 中的零拷贝技术,第 2 部分
http://www.ibm.com/developerworks/cn/linux/l-cn-zerocopy2/index.html?ca=drs-Linux 中的直接 I/O如果应用程序可以直接访问网络接口存储,那么在应用程序访问数据之前存储总线就不需要被遍历,数据传输所引起的开销将会是最小的。应用程序或者运行在用户模式下的库函数可以直接访问硬件设备的存储,操作系统内
2015-05-18 11:13:07 1217
转载 Linux 中的零拷贝技术,第 1 部分
引言传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。这样做最大的好处是可以减少磁盘 I/O 的操作,因为如果所请求的数据已经存放在操作系统的高速缓冲存储器中,那么就不需要再进行实际的物理磁盘 I/O 操作。但是数据传输过程中的数据拷贝操作却导致了极大的 CPU 开销,限
2015-05-18 11:10:47 1320
原创 关于The C10K problem的一些资料
英文原文:http://www.kegel.com/c10k.html两篇中文翻译:http://www.cnblogs.com/fll/archive/2008/05/17/1201540.htmlhttp://blog.csdn.net/goldou/article/details/2579781从C10k到C500K:http://www.360doc.c
2015-05-17 15:44:54 1662
原创 线程私有数据STD
http://blog.csdn.net/xluren/article/details/8226668以下来自:http://www.ibm.com/developerworks/cn/linux/thread/posix_threadapi/part2/概念及作用在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。在多线程环境下,由于数据空间是
2015-05-16 15:20:06 2295
原创 libnids中多线程
可以通过设置全局变量nids_params.multiproc不为0来在libnids中使用多线程捕获数据包。libnids使用的是glib库的gthread-2.0线程函数(该函数库某些函数已经过时,例如线程创建函数;过时的api:https://developer.gnome.org/glib/stable/glib-Deprecated-Thread-APIs.html;新版thread接口
2015-05-14 15:34:40 2932
原创 TCP和UDP区别
TCP和UDP区别TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。UDP(User Datagram Protocol) UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。 即使是出
2015-05-12 09:45:54 1615
原创 Wirshark抓包显示“TCP segment of a reassembled PDU”
用wireshark抓包发现里面有好多报文被标识为“TCP segment of a reassembled PDU”。如下图: “TCP segment of a reassembled PDU”指的不是IP层的分片,IP分片在wireshark里用“Fragmented IP protocol”来标识。详细查了一下,发现“TCP segment of a rea
2015-05-09 17:20:19 3663
转载 基于libnids的TCP数据流的还原(多线程实现)
我们知道,libnids本身可以实现TCP数据流的重组,但是如果一个TCP流数据量比较大的时候,就会分成好多个TCP报文段,这些报文段在网络中的传播可能是乱序的,利用libnids可以帮助我们按顺序接收到这些报文段,即实现TCP报文段的重组。 但是我们如何把这些顺序的报文段重新还原成一个完整的数据文件,也是要考虑的一个问题,因为在很多时候,单个的报文段对我们的意义不大,我们需要一个完整的
2015-05-07 21:13:47 1892
转载 Libnids TCP会话重组分析
作者:geeksword出处:http://onestraw.net/cybersecurity/libnids-tcp-assembly声明:本文采用以下协议进行授权: 署名-非商用|CC BY-NC 3.0 CN ,转载请注明作者及出处。Vim源码分析环境搭建好了here,今天拿libnids练练手,虽然cscope命令才掌握几个常用的,但是阅读速度已经
2015-05-07 14:42:53 4794
原创 libnids运行机制 函数调用流程
http://www.cnblogs.com/renhao/archive/2011/08/29/2158334.html(1)系统调用 int nids_init() 初始化程序 (2)int nids_init() 调用函数 init_procs(); 以下是该函数的实现代码: 1 staticvoid init_procs() 2 { 3
2015-05-07 08:57:17 1800
原创 m个苹果放入n个盘子
题目描述放苹果问题:把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(注:5,1,1和1,1,5是同一种分法)解题分析:设f(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论,当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即if(n>m) f(m,n) = f(m,m) 当n1、有至少一个盘子空
2015-05-05 17:29:40 10959 1
原创 动态规划:计算字符串相似度
《编程之美》第223页。题目描述 许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为:1.修改一个字符(如把“a”替换为“b”); 2.增加一个字符(如把“abdd”变为“aebdd”);3.删除一个字符(如把“travelling”变为“traveling”);比
2015-05-05 17:09:20 3643
原创 二进制位的翻转和二进制表示中1的个数
转自:http://blog.chinaunix.net/uid-20760757-id-1872389.htmlunsigned char reverse8( unsigned char c ){ c = ( c & 0x55 ) > 1; c = ( c & 0x33 ) > 2; c = ( c & 0x0F ) > 4; retu
2015-05-04 21:03:36 6165
原创 字符串合并处理(二进制位的倒序)
描述: 按照指定规则对输入的字符串进行处理。详细描述:将输入的两个字符串合并。对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。对排训后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。如字符
2015-05-04 20:28:38 3082
原创 汽水瓶
描述: 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
2015-05-04 16:44:28 1382
原创 称砝码问题
题目描述有一组砝码,重量互不相等,分别为m1、m2、m3……mn;它们可取的最大数量分别为x1、x2、x3……xn。 现要用这些砝码去称物体的重量,问能称出多少种不同的重量。 Input测试数据第一行一个整数n(n),表示有多种不同的砝码; 第二行n个整数(中间用空格分隔),m1、m2、m3……mn,分别表示n个砝码的重量;(1) 第三行n个整数(中间用空格分隔),x1、x
2015-05-04 16:25:48 3396 1
原创 最长递增子序列
一、题目描述描述:N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK,则他们的身高满足T1 Ti+1 > … > TK (1 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩
2015-05-02 20:40:57 13643
原创 string的size/length、resize/reverse和capacity
函数原型reserve原型: #include void reserve( size_type size = 0 );函数reserve()将字符串的容量设置为至少size.如果size指定的数值要小于当前字符串中的字符数(亦即size ), 容量将被设置为可以恰好容纳字符的数值. reserve()以线性时间(linear time)运行.
2015-05-02 09:38:59 2574
jsoncpp-src-0.5.0.rar.gz可正确编译的源文件
2015-12-11
DWR中文文档
2015-12-08
gethostbynameAndgetservbyname.tar.gz
2015-04-22
Visual_Assist_X_10.8.2036.0破解版以及破解方法
2014-12-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人