2011年4月15日
摘要: 通过内存映射文件,可以在同一台机器的不同进程间共享数据。Windows提供了其他一些方法在进程间共享数据,但这些方法都是通过内存映射文件来实现的。因此,要在同一台机器中共享数据,内存映射文件是最高效的方法。要使用内存映射文件,需执行下面三步:1、创建或打开一个文件内核对象,该对象标识了我们想要用作内存映射文件的对象 打开或者创建文件内核对象 HANDLE hCFile = CreateFile(TEXT(".\\data.txt"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL 阅读全文
posted @ 2011-04-15 16:33 rfcff 阅读(468) 评论(0) 推荐(0) 编辑
  2011年3月31日
摘要: #include<stdio.h>fun(int x){ if(x/2>0) fun(x/2); printf("%d ",x);}void main(){ fun(6); printf("\n");}试着分析下函数输出,结果是1 3 6。递归函数在每次被调用时都将创建自己的堆栈,一层一层向上返回。类似与入栈与出栈。 阅读全文
posted @ 2011-03-31 15:08 rfcff 阅读(120) 评论(0) 推荐(0) 编辑
  2011年3月18日
摘要: 最近的Project添加了运动控制代码,没加之前的Release是正常的。添加后的Debug正常,能控制电机转,但Release却不行,能与电机通讯却不能控制电机转。于是,变量初始化、内存分配、甚至在release中打印执行到的行数等等,想破头都没解决。还好在一位博士指导下得以解决。原因是宏定义,代码中有四个读写内存的宏定义要经常用到,而且有时要连续使用,可是操作的却是一个地址,如:MEM_WRITE_WORD(g9001_cmd,0x200);MEM_WRITE_WORD(g9001_cmd,0x300);这两句本意是初始化通讯板,使之做好通讯准备,由于操作的是同一个变量,所以在Releas 阅读全文
posted @ 2011-03-18 16:45 rfcff 阅读(1125) 评论(0) 推荐(0) 编辑
  2011年1月9日
摘要: 函数调用规则是调用者和被调用函数间传递参数及返回参数的方法。在Windows上,常用的事Pascal、WINAPI(_stdcall)、C方式(_cdecl)。下面是其规则:_cdecl方式,调用规则:参数从右到左进入堆栈在函数返回后,由调用者清空堆栈,所以这种调用常会产生较大的可执行程序__stdcall即WINAPI方式,调用规则:参数从右向左进入堆栈被调用的函数在返回前自行清理堆栈,所以产生的代码比_cdecl小Pascal调用规则:参数从左向右进入堆栈被调用的函数返回前自行清理堆栈不支持可变参数的函数调用 阅读全文
posted @ 2011-01-09 16:42 rfcff 阅读(245) 评论(0) 推荐(0) 编辑
  2010年12月29日
摘要: 通常情况下套接口是阻塞的,这意味着当一个套接字函数调用不能立即完成时,进程进入睡眠,知道操作完成。可能阻塞套接口的调用分为4种。1、输入:recv、recvfrom。当阻塞的tcp调用时,如果套接口缓冲区没有数据可读,进程将在数据到达前一直处于睡眠。同样如果一个阻塞的udp缓冲区为空,进程在下一个数据报到来前一直处于睡眠状态而非阻塞套接口不管是否有数据都将直接返回,有数据正常返回,没数据时WSAGetLastError()会返回WSAEWOULDBLOCK。2、输出:send、sendto。对一个tcp socket,内核从应用程序缓冲区想套接口缓冲区拷贝数据。当套接口没有空间时,进程处于睡眠 阅读全文
posted @ 2010-12-29 20:12 rfcff 阅读(938) 评论(0) 推荐(0) 编辑
摘要: 非阻塞的socket客户端connect()困扰了一下午。因为是非阻塞,不管是否连接上都直接返回,所以就无法知道什么时候连接上。一开始想到网上找资料,可惜不多。于是MSDN,总算找到一句话。With a nonblocking socket, the connection attempt cannot be completed immediately. In this case, this function will return SOCKET_ERROR and WSAGetLastError will resturn WSAEWOULDBLOCK. The following list s 阅读全文
posted @ 2010-12-29 09:56 rfcff 阅读(1920) 评论(0) 推荐(0) 编辑
  2010年11月22日
摘要: char* processInfo(char *process, int *len){......hprocess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (hprocess == INVALID_HANDLE_VALUE){return NULL;}memset(&pe, 0, sizeof(PROCESSENTRY32)... 阅读全文
posted @ 2010-11-22 10:03 rfcff 阅读(1460) 评论(0) 推荐(0) 编辑
  2010年10月19日
摘要: 这段时间一直在做工程控制项目,基于ProConOS平台开发。ProConOS早就在国内被广泛使用,但是网上的资源还是很少。项目已接近尾声,现在对项目试着做一些总结。1、Modbus协议,网上资料很多了。但还没整理好自己的,占位。2、位操作(1)、modbus返回值是字节型,要将其转为short型。  short s=0;  char str[256];  s=str[9];  s<<=... 阅读全文
posted @ 2010-10-19 22:03 rfcff 阅读(178) 评论(0) 推荐(0) 编辑
  2010年7月15日
摘要: 写个读MP3文件程序才发现自己对c的文件操作太不了解了。资料整理如下:  FILE *fopen(const char *filename, const char *mode);<stdio.h>  打开模式选项常见的"w","r","a","w+","r+"(文件必须存在),"a+"操作ASCII文件,"b"表示操作二进制文件。函数成功执行返回文件指针,否则返回null。  int ... 阅读全文
posted @ 2010-07-15 16:59 rfcff 阅读(289) 评论(0) 推荐(0) 编辑