C++杂七杂八

typedef

理解复杂声明可用的“右左法则”:
从变量名看起,先往右,再往左,碰到一个圆括号就调转阅读的方向;括号内分析完就跳出括号,还是按先右后左的顺序,如此循环,直到整个声明分析完。
举例:
int (*func)(int *p);
首先找到变量名func,外面有一对圆括号,而且左边是一个*号,这说明func是一个指针;然后跳出这个圆括号,先看右边,又遇到圆括号,这说明(*func)是一个函数,所以func是一个指向这类函数的指针,即函数指针,这类函数具有int*类型的形参,返回值类型是int。
int (*func[5])(int *);
func右边是一个[]运算符,说明func是具有5个元素的数组;func的左边有一个*,说明func的元素是指针(注意这里的*不是修饰func,而是修饰func[5]的,原因是[]运算符优先级比*高,func先跟[]结合)。跳出这个括号,看右边,又遇到圆括号,说明func数组的元素是函数类型的指针,它指向的函数具有int*类型的形参,返回值类型为int。

也可以记住2个模式:
type (*)(….)函数指针
type (*)[]数组指针

链接:http://www.cnblogs.com/charley_yang/archive/2010/12/15/1907384.html

注意
记住,typedef是定义了一种类型的新别名,不同于宏,它不是简单的字符串替换。
比如:
typedef char* PSTR;
然后:
int mystrcmp(const PSTR, const PSTR);
const PSTR实际上相当于const char*吗?不是的,它实际上相当于char* const。
原因在于const给予了整个指针本身以常量性,也就是形成了常量指针char* const。
简单来说,记住当const和typedef一起出现时,typedef不会是简单的字符串替换就行。

Runnable多线程操作

链接:http://blog.csdn.net/lcfigo1/article/details/6499767

Event事件

当创建一个线程时,其实那个线程是一个循环。这样就带来了一个问题,在那个死循环里要找到合适的条件退出那个死循环,那么是怎么样实现它的呢?在Windows里往往是采用事件的方式,当然还可以采用其它的方式。在这里先介绍采用事件的方式来通知从线程运行函数退出来,它的实现原理是这样,在那个死循环里不断地使用Wait(poco库里的wait函数)函数来检查事件是否满足,如果满足就退出线程,不满足就继续运行。
通过函数SetEvent/ResetEvent分别将EVENT设置为发信号与不发信号。
wait函数在事件所指定的对象(该对象可以是类,也可以是事件本身)为发信号状态时才退出线程

文本文件&二进制文件

链接:
http://www.xuebuyuan.com/1082559.html
http://zhidao.baidu.com/link?url=PoPDcyQd7LFeGo_VFIjRH8gV8ucisLKoRyDXw0h37jLTscf7w_OCN8D8NAXQH6mWEc4K7c5QvOryQdyF2nlPpK

NPF—网络数据包过滤器

Netgroup Packet Filter 网络数据包过滤器
〖NPF Device driver〗NPF驱动器
网络数据包过滤器(Netgroup Packet Filter,NPF)是Winpcap的核心部分,它是Winpcap完成困难工作的组件。它处理网络上传输的数据包,并且对用户级提供可捕获(capture)、发送(injection)和分析性能(analysis capabilities)。
它不仅提供了基本的特性(例如抓包),还有更高级的特性(例如可编程的过滤器系统)。前者可以被用来约束一个抓包会话只针对网络通信中的一个子集,后者提供了一个强大而简单的统计网络通信量的机制。

NIC—网卡

网卡(Network Interface Card,简称NIC),也称网络适配器,是电脑与局域网相互连接的设备。无论是普通电
脑还是高端服务器,只要连接到局域网,就都需要安装一块网卡。如果有必要,一台电脑也可以同时安装两块或多块网卡。
平常所说的网卡就是将PC机和LAN连接的网络适配器。网卡(NIC) 插在计算机主板插槽中,负责将用户要传递的数据转换为网络上其它设备能够识别的格式,通过网络介质传输。

io_service

详见链接:(http://www.cnblogs.com/TianFang/archive/2013/02/02/2890366.html)

API相关介绍

winAPI、SDK、CRT三者关系图:
这里写图片描述

winAPI

Application Programming Interface应用程序编程接口,现代的应用程序如果想访问硬件,就必须通过操作系统,具体来说就是使用操作系统提供的API。一个API就是一些功能的统一接口,它能把硬件的这些功能抽 象地统一起来,让程序员集中精力实现他们想要的功能。

SDK

平台软件开发包(Platform Software Development Kit),软件开发员在windows平台上开发软件。PSDK包含如下东东:

  1. 包含这些API生命的头文件;
  2. 包含这些API生命的头文件;
  3. 用于连接的相应的库文件(通过它们能够在相应的DLL中定位到这些API函数);
  4. 相关的说明文档;
  5. 各种帮助工具;

    例如,如果要打开或创建一个文件,我们要调用函数CreateFile,它在头文件”WinBase.h”中声明,通过库文件”Kernel32.lib”在dll文件中进行函数定位。
    Windows API的函数名称依照骆驼命名法命名,因此不同的函数很容易区分。常量和宏的命名一般是大写。在相应的文档里,会详细的说明每个函数所需要的头文件、库文件以及能够运行的相关平台。

CRT

C运行时程序库,基于操作系统的API函数,软件厂商实现了C运行时程序库(CRT)。CRT由一些头文件和相应的源文件构成,这些文件实现了一些基础的公共操作,如字符 串操作、一些数学运算函数和基本的输入\输出等操作。 CRT的函数名称一般都是小写的,宏和常数是大写的,而一些扩展则通常具有一定的以下划线作为开头的标识,例如函数_mkdir。针对这些扩展,相应的文档都会详细的予以说明。

C++标准库

C++编程语言有其自己的一套标准库。这些库包含了一系列的类和函数,可以在编程中使用。
通常,人们一提起C++标准库就下意识地直接联想到STL。STL是标准模板库(Standard Template Library)的缩写。STL最近的版本是作为C++标准库的一个子集发布的。但是现实中STL已经无处不在了,成了C++标准库的同义语。
C++标准库的大致组成:

  1. 容器。一般都是一些普通的数据结构,如vector,set,list,map;
  2. 迭代器。提供了一种统一的访问标准容器的方法;
  3. 算法。实现了一些常用的算法,这些算法一般都通过迭代器访问容器,而不是直接访问容器,所以一种算法可以作用于不同的容器;
  4. 分配器。负责容器内每个元素的内存空间的分配与回收;
  5. 函数对象以及Utilities。利用他们便于算法作用于各种容器;
  6. 字符流。把输入/输出流作为一个统一的对象处理;
  7. C动态运行库。由于要向后兼容C,所以CRT要作为C++标准库的一部分出现;

总结:本文大体上介绍了Windows API、CRT和STL相互之间的关系和依赖顺序。对于用户态的程序来说,Windows API是可以用到的计算机的最低一层。处于Windows API之上的则是C的动态运行库,它对操作系统进行了封装,并隐藏了不同的操作系统之间的差异。标准C++库则提供了更多的功能,并且把CRT作为它的一 部分。通过标准的函数以及相关类可以写出跨平台的程序,这个程序只需在新的平台上重新编译一次发布出来,代码不需要改动。

详见链接:(http://blog.163.com/ljm1113@126/blog/static/57984452201191493917125/)

时间结构体FILETIME和SYSTEMTIME

结构体定义:

    typedef struct _FILETIME {  
                              DWORD dwLowDateTime;  
                              DWORD dwHighDateTime;  
    } FILETIME, *PFILETIME;  
    typedef struct _SYSTEMTIME {  
                                WORD wYear;  
                                WORD wMonth;  
                                WORD wDayOfWeek;  
                                WORD wDay;  
                                WORD wHour;  
                                WORD wMinute;  
                                WORD wSecond;  
                                WORD wMilliseconds;  
    } SYSTEMTIME, *PSYSTEMTIME;  

常用操作函数:

  • 1 得到当前UTC时间
void GetSystemTime(LPSYSTEMTIME lpSystemTime);
  • 2 得到当地时间
void GetLocalTime(LPSYSTEMTIME lpSystemTime);
  • 3 SYSTEMTIME转成FILETIME
BOOL SystemTimeToFileTime(

    const SYSTEMTIME* lpSystemTime,

    LPFILETIME lpFileTime

);
  • 4 FILETIME转成SYSTEMTIME
BOOL FileTimeToSystemTime(

    const FILETIME* lpFileTime,

    LPSYSTEMTIME lpSystemTime

);
  • 5 当地时间转成UTC时间
BOOL LocalFileTimeToFileTime(

    const FILETIME* lpLocalFileTime,

    LPFILETIME lpFileTime

);
  • 6 UTC时间转成当地时间
BOOL FileTimeToLocalFileTime(

       const FILETIME* lpFileTime,

       LPFILETIME lpLocalFileTime

);

详见链接:(http://blog.csdn.net/morewindows/article/details/8654298)

模板

详见链接:(http://www.cnblogs.com/gw811/archive/2012/10/25/2738929.html)

operator操作符

详见链接:(http://blog.csdn.net/my_heart_/article/details/51534624)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值