
C
文章平均质量分 70
super_bert
二到尽头,覆水难收。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C语言调用DLL动态链接库出错
动态加载dll后,执行导出的C API发生运行时错误:Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling conve原创 2014-11-03 16:04:16 · 1489 阅读 · 0 评论 -
C语言函数调用约定-stdcall&cdecl&thiscall
stdcall&cdecl&thiscall等等函数调用【转】在C语言中,假设我们有这样的一个函数:int function(int a,int b)调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什转载 2014-07-26 23:28:22 · 1415 阅读 · 0 评论 -
使用 __attribute__ ((packed))让结构体编译时内存不对齐
网络通信通常分为基于数据结构的和基于流的。HTTP协议就是后者的一个例子。 有时为了提高程序的处理速度和数据处理的方便,会使用基于数据结构的通信(不需要对流进行解析)。但是,当需要在多平台间进行通信时,基于数据结构的通信,往往要十分注意以下几个方面:[1] 字节序[2] 变量长度[3] 内存对齐 在常见的系统架构中(Linux X86,Windows),非单字节长度转载 2014-08-06 23:31:33 · 1801 阅读 · 0 评论 -
C语言JSON字符串合法性检查
在http://www.json.org/JSON_checker/上有一个开源的工具,仅一个C文件、一个H文件,还附带UTF8转UTF16的转换工具。将main函数修改了一下,便可作为工程的一个小模块使用,检查JSON字符串的合法性,以便于进行报文解析。/* Read input string and check. if not json string return -1, els原创 2015-03-07 17:17:08 · 4217 阅读 · 0 评论 -
文件描述符fd和文件指针fp之间的相互转换
Linux/Unix下使用open函数(系统调用)打开文件会得到文件描述符fd(int型变量),而使用C库中的fopen函数打开文件则会得到文件描述符fp(FILE*型变量),二者之间是可以相互转换的,下面是两个example。1.fd转换为fpint main(int argc, char *argv[]){ FILE *fp = NULL; fp = fopen("原创 2015-04-15 20:28:06 · 10726 阅读 · 1 评论 -
Linux/Unix 守护进程编写实例
Linux/Unix系统中的后台程序(Service),一般称为Daemon。创建守护进程的5个固定步骤:1.调用fork()产生一个子进程,父进程退出;2.调用setsid()创建会话组;3.改变工作目录为根目录;4.关闭从父进程继承的文件描述符fd;5.调用umask()重设文件权限掩码;DEMO/** @function : create原创 2015-04-17 15:03:50 · 673 阅读 · 0 评论 -
C语言验证栈(Stack)的增长方向
C中函数的参数列表、非static局部变量、函数返回值均保存在栈帧中,而栈是向下增长(即栈顶在低地址、栈底在高地址)的,下面是一个判断栈的增长方向的栗子。DEMO#include void func1();void func2(int *a);int main(int argc, char *argv[]) { func1(); return 0;原创 2015-04-19 22:55:19 · 1542 阅读 · 0 评论 -
C语言程序内存布局
一、几个概念1.栈(stack) C语言通过栈来维护函数调用上下文,也就是说C中的函数、函数参数列表、局部变量、函数返回值都保存在栈内存中,在完成函数调用之后栈帧随即销毁,至于具体的压栈顺序和上下文维护工作由谁来完成,则取决于函数的调用方式(cdecl/stdcall/fastcall/pascal). 栈帧一般包括如下几方面内容: ①函数的参数列表和原创 2015-03-19 14:28:02 · 4749 阅读 · 1 评论 -
Windows和Linux/Unix系统中文件路径使用总结
一、Microsoft Windows Windows系统中以反斜线’\‘表示文件路径,而在编程语言中反斜线'\'通常为转义字符。所以在Windows环境下的程序中,如涉及到文件路径一般需要写成如下形式: "D:\\Microsoft Visual Studio 2010 Workspace\\MFCardReader\\" 其中第一个反斜线为转义符,第二个反斜线表原创 2015-03-13 21:35:44 · 5045 阅读 · 0 评论 -
volatile关键字用法总结
大家都知道C语言中volatile这个关键字,它是“易变”的意思,其实把它理解成“直接存取原始地址”比较确切;1.直接修饰C函数,方便编译器进行优化我们会在一些代码中用volatile关键字来修饰函数,如linux0.12的源代码中就有这样的语句:在linux的source code(linux/mm/memory.c)中有这样两句:volatile void do_exit(lo转载 2015-03-17 10:44:05 · 1022 阅读 · 0 评论 -
Micro definition ---C语言中宏定义使用总结
Micro definition ---C语言中宏定义使用总结1、在头文件中定义不会变化的常量#define MAX_LEN 1024原创 2014-12-27 16:16:03 · 1847 阅读 · 0 评论 -
Windows下获取当前程序文件名或完整路径方法
1、通过用_splitpath函数对argv[0]参数进行分割,然后自行拼接组装字符串,想要哪个可以将其以参数传出。int deal_for_work_path(char *full_path){ char path_buffer[_MAX_PATH]; char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; c原创 2014-12-18 21:17:56 · 4823 阅读 · 0 评论 -
C语言读写bmp位图文件
bitmap格式图片是未经压缩的,一般24bit位图(即一个像素点以24个二进制位表示)。分别用8个二进制位表示R/G/B三种颜色,这样一共可以表示256*256*256=16777216种颜色。8bit的位图则为黑白图像,32bit位图除16777216种颜色外还有8个bit表示光栅(有待具体研究)。bitmap格式图片都有文件头、图片信息头、图片数据,这片东西估计需要另外再原创 2014-12-20 14:52:56 · 7457 阅读 · 0 评论 -
GetProcAddress函数用法
显式链接到 DLL 的进程调用 GetProcAddress 来获取 DLL 导出函数的地址。 使用返回的函数指针调用 DLL 函数。GetProcAddress 将(由 LoadLibrary、AfxLoadLibrary 或GetModuleHandle 返回的)DLL 模块句柄和要调用的函数名或函数的导出序号用作参数。 由于是通过指针调用 DLL 函数并且没有编译时类型检原创 2014-11-03 15:17:54 · 20538 阅读 · 2 评论 -
Linux/Unix下采用dlopen、dlsym、dlclose加载动态链接库
1、前言 为了使程序方便扩展,具备通用性,可以采用插件形式。采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件。linux提供了加载和处理动态链接库的系统调用,非常方便。本文先从使用上进行总结,涉及到基本的操作方法,关于动态链接库的本质及如何加载进来,需要进一步学习,后续继续补充。如何将程序设计为插件形式,挖掘出主题和业务之间的关系,需要进一步去转载 2016-02-26 14:19:08 · 1476 阅读 · 0 评论