心心程序博客

眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行!

导航

2012年5月13日

windows核心编程第二章阅读

摘要: 1。windows帮助开发人员本地化应用程序2.缓冲区溢出错误(这是处理字符串的典型错误)已经成为针对应用程序乃至操作系统的各个组件发起安全攻击的媒介;(使用microfofe新的C库函数来防止应用程序的缓冲区溢出错误)3使用Unicode字符会增强应用程序的执行性能。并未本地化工作奠定基础。4UTF-16一般现在使用的。UTF是Unicode转换格式的简写UTF-8中解释为,有的字符为1个字节,有的为两个,意思不是说在一个程序中字符不一样,而是说在不同的程序中(不同的地区)有的为1字节程序(如美国)有的为2字节(中东地区和欧洲)……5在windows NT技术的内核使用的是Unicode 字 阅读全文

posted @ 2012-05-13 11:18 心心程序博客 阅读(270) 评论(0) 推荐(0) 编辑

2012年5月9日

windows核心编程第一章阅读

摘要: 1.windows函数检测到错误时,会使用一种名为“线程本地存储区”的机制将相应的代码与“主调线程”关联到一起。这种机制使不同的线程能够独立运行,不会出现相互干扰对方的错误代码的情况。2winError。h(3900行)里面包含了错误代码列表。3使用GetLastError不仅可以观察错误代码,而且可以查看成功的具体原因。4在调试情况下使用Watch窗口 输入$err,hr来观察GetLastError的返回值; 阅读全文

posted @ 2012-05-09 10:39 心心程序博客 阅读(218) 评论(0) 推荐(0) 编辑

2012年4月24日

小程序引发的深层思考

摘要: #include<stdio.h>#include<stdlib.h>#include<malloc.h>/* * 功能:演示双向链表 * 作者:虾米 * *//*定义双向链表的存储结构*/typedef struct du_node{ int num; struct du_node *prior; struct du_node *next;}DU_NODE, *du_linklist;/*1. 创建链表*/DU_NODE *create(void){ char flag = 'Y'; printf("======Create li 阅读全文

posted @ 2012-04-24 21:40 心心程序博客 阅读(236) 评论(0) 推荐(0) 编辑

2012年4月23日

linux 互斥锁

摘要: #include <assert.h>#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#include <pthread.h>#define __FUNC__ __func__pthread_mutex_t hMutex = PTHREAD_MUTEX_INITIALIZER;void *threadFunc1(void *arg){ while(1) { pthread_mutex_lock(&hMutex); ... 阅读全文

posted @ 2012-04-23 09:24 心心程序博客 阅读(2991) 评论(0) 推荐(0) 编辑

2012年4月20日

linux系统时间

摘要: 可以用localtime函数分别获取年月日时分秒的数值。 Linux下获得系统时间的C语言的实现方法: 1.可以用localtime函数分别获取年月日时分秒的数值。 #include<time.h>//C语言的头文件 #include<stdio.h>//C语言的I/O voidmain() { time_tnow;//实例化time_t结构 structtm*timenow;//实例化tm结构指针 time(&now); //time函数读取现在的时间(国际标准时间非北京时间),然后传值给now timenow=localtime(&now); //l 阅读全文

posted @ 2012-04-20 14:58 心心程序博客 阅读(718) 评论(0) 推荐(0) 编辑

2012年4月11日

linux定时器

摘要: 今天看书看到了关于alarm的一些用法,自己有在网上找了些资料看了下;1。alarm()执行后,进程将继续执行,在后期(alarm以后)的执行过程中将会在seconds秒后收到信号SIGALRM并执行其处理函数。#include <stdio.h>#include <unistd.h>#include <signal.h>void sigalrm_fn(int sig){ printf("alarm!\n"); alarm(2); return;}int main(void){ signal(SIGALRM, sigalrm_fn); a 阅读全文

posted @ 2012-04-11 14:16 心心程序博客 阅读(28867) 评论(0) 推荐(2) 编辑

多线程同时写1个SOCKET时可能出现问题

摘要: 这里只描述同步Socket的send函数的执行流程。当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲的 长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR;如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议 是否正在发送s的发送缓冲中的数据,如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中的数据或者s的发送缓冲中没有数据,那么 send就比较s的发送缓冲区的剩余空间和len,如果len大于剩余空间大小send就一直等待协议把s的发送缓冲中的数据发送完,如果len小于剩余 空间大小send就仅仅把buf中的数据c 阅读全文

posted @ 2012-04-11 10:07 心心程序博客 阅读(7031) 评论(0) 推荐(0) 编辑

2012年4月4日

C指针,C语言中的指针详解

摘要: 有错误的地方带查证:一、 数组的指针、指针数组以及指向指针的指针 考虑数组的指针的时候我们要同时考虑类型和维数这两个属性。换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位一、数组的指针、指针数组以及指向指针的指针 考虑数组的指针的时候我们要同时考虑类型和维数这两个属性。换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位置表示他的种类。A)一维数组 在c和c++中数组的指针就是数组的起始地址(也就第一个元素的地址),而且标准文档规定数组名代表数组的地址(这是地址数值层面的数组表示)。例如:int a[10]; int *p;p=&a[0]//和p 阅读全文

posted @ 2012-04-04 14:33 心心程序博客 阅读(16762) 评论(0) 推荐(0) 编辑

二维数组的内存映像

摘要: 6.3.3 二维数组在形式上很像一个矩阵或者一个二维的表格,例如:int a[2][3];可以把二维数组a的所有元素放在一个二维表中:a[0][0] a[0][1] a[0][2]a[1][0] a[1][1] a[1][2]二维数组在定义后,同样系统会为它申请内存。如果是一个m*n的二维数组,需要申请m*n的内存单元,每个内存单元所需的字节数取决于二维数组的类型。例如上述的二维数组a,因为int型变量占用2个字节(Turbo C环境),那么a数组需要2*3*2=12个字节的内存。C语言规定:二维数组元素在内存中顺序排放,排列顺序是按行存放。即先顺序存放第一行的数组元素,然后存放第二行的数组元 阅读全文

posted @ 2012-04-04 10:12 心心程序博客 阅读(3141) 评论(0) 推荐(0) 编辑

2012年4月2日

关于settimer的一些新认识

摘要: 原来在MFC下用过一些settimer函数 公司让在控制台下应用,当时人文settimer跟硬件中断时一样的,所以写了如下函数:#include #include #include UINT_PTR htimer_controll; VOID CALLBACK TimerProc_controll(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime) ;int main(int argc, char **argv){htimer_controll = ::SetTimer(NULL,1,1000,TimerProc_controll);w. 阅读全文

posted @ 2012-04-02 11:11 心心程序博客 阅读(428) 评论(0) 推荐(0) 编辑