摘要: 如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的。Windows操作系统提供了选择(Select)、异步选择 (WSAAsyncSelect)、事件选择(WSAEventSelect)、重叠I/O(Overlapped I/O)和完成端口(Completion Port)共五种I/O模型。每一种模型均适用于一种特定的应用场景。程序员应该对自己的应用需求非常明确,而且综合考... 阅读全文
posted @ 2009-07-16 13:02 辛勤耕耘 阅读(1779) 评论(0) 推荐(2) 编辑
摘要: 重叠I/O一.重叠模型的优点1. 可以运行在支持Winsock2的所有Windows平台 ,而不像完成端口只是支持NT系统。2. 比起阻塞、select、WSAAsyncSelect以及WSAEventSelect等模型,重叠I/O(Overlapped I/O)模型使应用程序能达到更佳的系统性能。 因为它和这4种模型不同的是,使用重叠模型的应用程序通知缓冲区收发系统直接使用数据,也就是说,如果应... 阅读全文
posted @ 2009-07-15 13:49 辛勤耕耘 阅读(3302) 评论(0) 推荐(0) 编辑
摘要: 原文链接如何启用内存泄漏检测机制? VC++ IDE 默认是没有启用内存泄漏检测机制的,即使某段代码有内存泄漏,调试会话的 Output 窗口的Debug 页不会输出有关内存泄漏信息。需要两步来启用内存泄漏检测机制。 第一步,使用调试堆函数(crtdbg.h): [代码]crtdbg.h 头文件,可以将 malloc 和 free 函数映射到其“调试”版本 _malloc_... 阅读全文
posted @ 2009-07-13 22:14 辛勤耕耘 阅读(916) 评论(0) 推荐(1) 编辑
摘要: 1,断点设置有技巧:1)设置条件断点,比如i==10,变量改变时断点;2)如何让断点在指定的命中次数或者大于某个次数时触发呢?方法是设定几个断点的HitCount,右键单击断点,在弹出菜单中选择Hit Count;3)When Hit,这个选项可以让我们在命中断点后做一些事情,包括输出一些内容,或者调用宏,比如输出一个程序中变量的值;4)利用断点的Filter功能,比如我希望断点只有被机器名为yi... 阅读全文
posted @ 2009-07-12 12:18 辛勤耕耘 阅读(836) 评论(0) 推荐(0) 编辑
摘要: 原文完整内容通常,socket编程总是Client/Server形式的,因为有了telnet,先不考虑client的程序,先写一个支持TCP协议的server端,然后用telnet作为client验证我们的程序。TCP server端的基本流程 想象你自己是个小大佬,坐办公室(什么样的黑社会做办公室啊?可能是讨债公司吧^^)你很土,只有一个小弟帮你接电话(因为你自己的号码是不敢对外公开的)。一次通... 阅读全文
posted @ 2009-07-11 15:52 辛勤耕耘 阅读(4207) 评论(1) 推荐(1) 编辑
摘要: 原文链接 其中有一些函数的作用完全相同,只是参数不同。(可能很多熟悉C++朋友马上就能联想起函数重载,但是别忘了Linux核心是用C语言写的,所以只能取成不同的函数名)。还有一些函数已经过时,被新的更好的函数所代替了(gcc在链接这些函数时会发出警告),但因为兼容的原因还保留着,这些函数我会在前面标上“*”号以示区别。 一、进程控制: fork 创建一个新进程 clone 按指定条件创建子进程... 阅读全文
posted @ 2009-07-11 10:31 辛勤耕耘 阅读(939) 评论(1) 推荐(0) 编辑
摘要: 原文看完整内容 首先,Windows套接字在两种模式下执行I / O操作:锁定和非锁定。 在锁定模式下,在I / O操作完成前,执行操作的Wi nsock函数(比如send和recv)会一直等候下去,不会立即返回程序(将控制权交还给程序)。而在非锁定模式下, Wi nsock函数无论如何都会立即返回。1 锁定模式 耗费或长或短的时间“等待”。 大多数Wi nsock应用... 阅读全文
posted @ 2009-07-11 09:35 辛勤耕耘 阅读(2255) 评论(0) 推荐(2) 编辑
摘要: 来源:Intetnet 1 进程与进程通信 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。多进程/多线程是Windows操作系统的一个基本特征。Microsoft Win32应用编程接口(Application Programming Interface, API)提供了大量支持应用程序间数据共享和交换的机制,这些机制行... 阅读全文
posted @ 2009-07-10 23:27 辛勤耕耘 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 常用的字符串处理函数 字符串标准函数的原型在头文件string.h中。 1.输入字符串──gets()函数 (1)调用方式:gets(字符数组) (2)函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去 (3)使用说明 1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。 2)该函数输入的字符串... 阅读全文
posted @ 2009-07-09 14:30 辛勤耕耘 阅读(593) 评论(0) 推荐(0) 编辑
摘要: 1、 一些头文件的作用:<assert.h>:ANSI C。提供断言,assert(表达式)<glib.h>:GCC。GTK,GNOME的基础库,提供很多有用的函数,如有数据结构操作函数。使用glib只需要包含<glib.h><dirent.h>:GCC。文件夹操作函数。struct dirent,struct DIR,opendir(),close... 阅读全文
posted @ 2009-07-09 00:04 辛勤耕耘 阅读(699) 评论(0) 推荐(1) 编辑
摘要: gcc 命令的常用选项 选项 解释 -ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色,例如 asm 或 typeof 关键词。 -c 只编译并生成目标文件。 -DMACRO 以字符串“1”定义 MACRO 宏。 -DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏。 -E 只运行 C 预编译器。 -g 生成调试信息。GNU 调试器可利用该信息。 -IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。 -LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。 -lLIBRARY 连接时搜索指定的函数库LIBRARY。 阅读全文
posted @ 2009-07-08 23:34 辛勤耕耘 阅读(1738) 评论(0) 推荐(0) 编辑
摘要: 内存管理Global标准内存管理GlobalAlloc函数使用GMEM_MOVEABLE参数返回的是个内存句柄,内容是一个地址,这个地址才是可以使用的内存块。比如:PVOID lpMem = GlobalAlloc(GHND, 1000);现在lpMem指向的内容是一个地址,必须通过GlobalLock(lpMem)函数返回这个指针才能使用。实际上GMEM_MOVEABLE参数和GMEM_FIXE... 阅读全文
posted @ 2009-07-08 18:17 辛勤耕耘 阅读(1020) 评论(0) 推荐(0) 编辑
摘要: WIN32的消息机制 windows系统是一个消息驱动的OS,操作通过处理各种消息来响应用户的操作。 对于每一个带有窗口的线程,系统都会给他分配一个自己的消息队列,用于处理消息派送(Dispatch)。每个线程都用自己的消息循环来接受消息。每个线程列队默认管理最大10000个消息,修改注册表下面的键值可以修改列队中的消息数。建议的最小值是4000 HKEY_LOCAL_MACHINE\SOFTWA... 阅读全文
posted @ 2009-07-08 17:25 辛勤耕耘 阅读(855) 评论(0) 推荐(0) 编辑
摘要: 基本概念  Win16 内存模式下,所有的应用程序都运行于同一个 4GB 地址空间,它们可以彼此"看"到别的程序的内容,这极易导致一个应用程序破坏另一个应用程序甚至是操作系统的数据或代码。  每一个Win32 应用程序,放到分开的虚拟地址空间(相互独立的 4GB 地址空间)中去运行,当然这倒不是说它们都拥有 4GB 的物理地址空间,而只是说能够在 4GB 的范围内寻址。操作系统将会在应用程序运行时... 阅读全文
posted @ 2009-07-08 11:41 辛勤耕耘 阅读(420) 评论(0) 推荐(0) 编辑
摘要: Windows进程有私有的内存空间, 但内核态的操作系统和设备驱动代码, 共享单一(a single)虚拟内存空间。虚拟内存的每一页都被标记(tagged )了读写需要的处理器访问模式。系统空间的页只能在内核态访问,用户地址空间在用户态可以访问。只读页(例如包含可执行代码的页)任何模式下都不可改写。   The four basic types of user-mode process... 阅读全文
posted @ 2009-07-01 14:46 辛勤耕耘 阅读(668) 评论(0) 推荐(0) 编辑