- 博客(19)
- 资源 (15)
- 问答 (2)
- 收藏
- 关注
原创 原子操作
原子操作在多线程编程中,访问同一个变量时需要利用锁来限制同一个时刻只有一个线程访问,否则会遇到未知的错误,最常用的锁有信号量、线程锁。系统也提供了一些原子操作来实现多个线程对同个变量的访问。它们的性能参照另外篇文章锁性能,从该文章中可知。原子操作比锁性能高,下面介绍系统所自带的几种原子操作头文件atomic.htypedef struct { int co
2015-08-31 09:55:11 964 1
翻译 函数strstr,strcasestr
一.strstr1.调用格式 #include char *strstr(const char *haystack, const char *needle);2.功能说明该函数在参数haystack给定的字符串中找到字符串needle出现的第一次位置。匹配字符串needle不会匹配字符串结束符‘\0’(参照实例代码1)。在早些版本的linux libc中该函数是不允许
2015-08-25 08:29:01 9780
翻译 shutdown
命令shutdown格式:shutdown [OPTION]... TIME [MESSAGE]选项参数: -r 关机后重启 -h 关机后进入休眠或关闭电源 -H 关机后进入休眠 -P 关机后关闭电源 -c 取消正在执行的shutdown命令 -K 发送警告信息,但不关机 -q 不输出任何信息,仅仅只输出错误信息 -v -
2015-08-24 08:35:51 641
原创 存储器层次结构
存储器层次结构系统存储数据主要有寄存器、SRAM、SDRAM、磁盘,其中SRAM作为系统的高速缓存,DRAM是系统的主存,他们的访问读写速度各不相同,造价也因读写速度不同而不同。如图:cpu读磁盘上数据,首先把磁盘中的数据读取到主存中,然后高速缓存,再到寄存器,通过局部性可参考另一篇文章代码的局部性,把最近使用的数据存储在高速缓存中提高访问速度。首先我们来介绍两个关于访问存
2015-08-21 09:18:06 995
原创 多线程竞争
在多线程编程中,会经常碰到资源竞争的情况,如果多个线程同时访问同个资源,会照成未知的错误。如以下实例代码,多个线程对同个全局变量进行加1操作,得到的结果并非是我们想要的结果:unsigned long g_count_num = 0;long long getSystemTime() { struct timeb t; ftime(&t); return
2015-08-20 09:18:37 2901
原创 tcp ip协议笔记(4)——arp
一.ARP和RARP网络传输中,根据目的ip地址通过路由选择可以在互联网中传输,但是如果不知道目的接口,那么也就不知道包该传输到某个网络或某个子网中哪台主机。arp(地址解析协议)即可根据目的ip来获取目的接口从而使俩台主机正常通信。RARP与ARP相反,逆地址解析协议。arp为不同的网络层提供地址解析服务。二.ARP传输过程主机要与目的主机进行通信,那么首先得进行tcp连
2015-08-17 08:49:56 1361
原创 RAM、ROM和磁盘
计算机存储数据的存储器主要分为RAM(随机访问存储器)、ROM、磁盘。RAM又分为SRAM和DRAM两种,SRAM用作高速缓存,DRAM用作主存。1.SRAMSRAM又被称为静态RAM,利用双稳态电路进行存储。即使有干扰对稳态电路也没影响,所以由于双稳态性,只要有电,SRAM中的数据就不会有变化。SRAM的双稳态性,就类似于双摆,两边稳定的,中间是不稳定的,也许有时候电路会处于不稳
2015-08-14 09:09:01 5677
原创 条件传送和条件控制转移
条件控制转移指根据代码的条件结果来选择执行的路径,条件传送指先把结果执行,在根据条件结果选择结果值在相同的情况下,条件传送性能比条件控制转移高
2015-08-13 08:53:47 2536
原创 代码的局部性
现代操作系统中,基本上都带有设计的高速缓存,高速缓存比读写磁盘和主存快的多,在高速缓存中操作数据性能相对于磁盘和主存快很多。系统会把程序最近用到的数据存储在高速缓存中以便程序下一次使用时直接从高速缓存中读取,这就是代码的时间局部性。系统也会把最近用到的数据的临近地址存储在高速缓存中以便下一次使用,这是空间局部性。int main(){ int b_data,
2015-08-12 13:55:15 1451
原创 libpcap出错信息调试函数pcap_geterr, pcap_perror
libpcap出错信息调试函数pcap_geterr, pcap_perror函数 pcap_geterr, pcap_perror 获取并且把libpcap操作失败的信息打印出来调用格式 #include char *pcap_geterr(pcap_t *p); void pcap_perror(pcap_t
2015-08-12 09:01:53 1876
原创 抓包函数-pcap_next
抓包函数 pcap_next_ex, pcap_next 抓包 #include int pcap_next_ex(pcap_t *p, struct pcap_pkthdr **pkt_header, const u_char **pkt_data); const u_char *pcap_
2015-08-11 08:31:10 8332
原创 进程间通信-信号量
信号量简介:信号量与其他的ipc(管道 fifo 消息队列)不同,他是一个计数器,来计数可以访问共享资源的进程数信号量操作1.创建一个信号量2.对信号量进行初始化3.测试控制共享资源的信号量4.若信号量为正则进程可以使用该资源信号量减一5.若信号量为0则进程阻塞(如果设置成非阻塞则出错返回)直至信号量变正.信号量唤醒,返回第3步执行6.若进程不再需要使用共享
2015-08-10 09:18:47 1671
原创 内联函数
内联函数是指编译时,内联函数在调用的地方类似宏定义展开,避免了函数调用的开销。一般用关键字inline来修饰内敛函数。如:static inline int test_fun()。因为是编译时内联函数在调用地方展开,所有相同情况下,内联函数比普通函数编译后的执行文件要大。1.内敛函数中不能出现循环或switch语句,否则编译器会视其为普通函数2.一般才有几句语句的函数才适合定义成内
2015-08-07 09:12:38 572
原创 进程间通信-队列
消息队列消息队列是通过标识来引用,消息队列类似于一个消息链表,通过队列标识来引用,标识通过key来获取msgget(key_t key, int flag)。创建队列过程:1.确定队列的key,key可以自定义,也可以利用ftok来获取一个key①利用ftok来得到一个key值ftok(const char * path, int id)路径必须是一个存在的文件路径
2015-08-07 09:00:20 801
原创 libpcap包过滤-pcap_compile()
pcap_compile()是用来把用户输入的过滤字符串编译进过滤信息的,这个过滤信息可以决定哪些包是用户可获取到的 。 过滤表达式包含一个或多个元素。每个元素通常包含由多个或一个被修饰符修饰的id名称或数字,有三种不同的修饰符: 类型修饰符 说明id属于那种类型。可以用的类型修饰符有host,net,port,portrang
2015-08-06 09:53:40 26657
原创 /etc/ethers
mac地址与ip地址文件,文件中包含了mac地址以及对应的ip地址,在文件中mac和ip是被空格或者tab隔开,mac格式为x:x:x:x:x:x,x是0-ff的16进制,mac是网络字节序的,ip地址可以使由DNS提供的域名,也可以是点分制的数字
2015-08-05 09:08:11 3418
原创 sizeof和strlen
sizeof是用来计算指定参数所占内存大小。sizeof不是函数,是单目运算符,调用形式:1.sizeof(arg)2.sizeof argarg可以是变量,类型修饰符,表达式,如果arg是一个字符串常量,那么返回字符串长度且包含字符串结束符例如 sizeof(int) sizeof(变量a) sizeof(表达式)strlen计算指定字符串长度,不包括字符串结束符
2015-08-05 09:05:08 410
原创 tcp ip协议笔记(3)——网络层
一.网络层 网络层是为网络提供传输信息,主要有ip协议二.ip报文 ip报文是不可靠无连接的,不可靠是因为它不会有超时重传等纠错能力,它也不会保存包文的状态所以是无连接的,这些得依靠上层协议来实现。1.ip头格式ip头信息如图:Version: 4 表示版本号,一
2015-08-03 08:47:42 676
实现IDocHostShowUI接口的ShowMessage方法
2016-05-30
vc 网络聊天软件 源代码
2011-05-10
http 百度搜索链接的页面来源关键词
2016-03-19
libpcap在同块网卡抓包和回包
2015-03-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人