
C语言
文章平均质量分 55
sdsszk
这个作者很懒,什么都没留下…
展开
-
dlopen动态加载动态库
1、前言 为了使程序方便扩展,具备通用性,可以采用插件形式。采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件。linux提供了加载和处理动态链接库的系统调用,非常方便。本文先从使用上进行总结,涉及到基本的操作方法,关于动态链接库的本质及如何加载进来,需要进一步学习,后续继续补充。如何将程序设计为插件形式,挖掘出主题和业务之间的关系,需要进一步去学习。 2、生产动态链接库 编译参数 gcc -fPIC -shared 例如将如下程序编译为动态链接库libcacu原创 2020-12-01 11:19:59 · 1571 阅读 · 0 评论 -
利用backtrace和backtrace_symbols函数打印调用栈信息
int backtrace(void **buffer,int size) 该函数用与获取当前线程的调用堆栈,获取的信息将会被存放在buffer中,它是一个指针数组。参数 size 用来指定buffer中可以保存多少个void* 元素。函数返回值是实际获取的指针个数,最大不超过size大小在buffer中的指针实际是从堆栈中获取的返回地址,每一个堆栈框架有一个返回地址。 注意某些编译器的优化选...原创 2020-03-07 20:42:53 · 776 阅读 · 0 评论 -
多线程之间信号量
...转载 2020-01-16 09:39:26 · 317 阅读 · 0 评论 -
gdb利用core调试段错误
core dump 一般是在segmentation fault(段错误)的情况下产生的文件,需要通过ulimit来设置才会得到的。 调试的话输入: gdb filename core filename就是产生core文件的可执行文件,core就是产生的dump文件 查看栈信息 ————— 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程...转载 2019-01-14 09:58:09 · 546 阅读 · 0 评论 -
C语言判断点是否在不规则四边形内部
最近在做人脸设备区域屏蔽功能,说白了就是对人脸进行过滤; 在四边形内的人脸不进行检测,其中涉及到一个算法,即判断点是否在四边形内部,网上查了下,最简单方便的便是向量积法,如下: 先提供一种简单情景(假定四边形是一个凸四边形)的解决方法: 原理:凸多边形内部的点都在凸多边形的边所在的向量的同一侧(前提是计算边所在的向量时采用的是同一个方向,同为顺时针或者同为逆时针),利用叉积求解。 假设四边形四个顶...原创 2018-12-12 19:50:50 · 3824 阅读 · 1 评论 -
让你不再害怕指针——C指针详解
前言:复杂类型说明     要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让...转载 2018-09-21 11:48:00 · 132 阅读 · 0 评论 -
cmake万能模板
最近在学习cmake 的使用,相比于Makefile,它不仅简单,而且容易学习,只有几个参数,下面讲介绍cmake的使用。 首先,我在Linux中创建如下几个目录文件: ├── build ├── CMakeLists.txt ├── include ├── src 说明:build–自己创建的目录,后边会用到 include–存放头文件的目录 ...原创 2018-09-03 20:06:09 · 2550 阅读 · 0 评论 -
函数指针 指针函数
版权声明:本文为博主原创文章,转载请标明出处。http://blog.youkuaiyun.com/sum_tw https://blog.youkuaiyun.com/sum_TW/article/details/53540796 ...转载 2018-08-30 11:01:52 · 183 阅读 · 0 评论 -
C语言动态申请内存
在C语言中,数组的长度在定义变量的时候便需要指定,并且只能是一个常数,不能是其它变量。所以,一旦定义了一个数组,系统将为它分配一个固定大小的空间,以后都不能改变,这样的数组称为静态数组。 但在某些时候,我们需要的数组的长度是无法预先确定的,要解决这样的限制,需要使用动态数组。动态数组是相对于静态数组而言。动态数组的内存空间是从堆(heap)上分配的,是在执行代码过程中分配的,当程序执行到这些语句时...原创 2018-09-01 16:04:11 · 9157 阅读 · 0 评论 -
数组指针 指针数组 的 简单记忆方法
指针数组:int P[10]* 首先p先和[]结合(因为[]的优先级高于*),首先它是一个数组,然后才是指针,所以是指针数组; 口诀:先数组后指针,即为指针数组。 数组指针:int (*p)[10]; 首先p先和*结合组成指针,有和[]结合,组成数组,所以是数组指针; 口诀:先指针后数组,即为数组指针; 指针函数:int *fun(int a) 首先fun先和()结合,组成函数,又...原创 2018-08-30 16:20:02 · 427 阅读 · 0 评论 -
自己实现memcpy()
#include<stdio.h> void *my_memcpy(void *dest, void *src, int num) { if((dest == NULL) ||(src == NULL)) { printf("parameter error!\n"); return 0; } char *pdest; char *psrc; pdest = des...原创 2018-07-13 20:58:58 · 1618 阅读 · 1 评论 -
static关键字的作用
当它用于函数定义时,或用于代码块之外的变量声明的时候,static关键字用于修饰符的链接属性,从externl改为internal,但是标识符的存储类型和作用域不受影响。用这种方式声明的函数或者变量只能在它们的源文件中访问。 当它用于代码块内部的变量声明的时候,static 关键字用于修饰变量的存储类型,从自动变量改为静态变量,但是变量的链接属性或者作用域不受影响。用...原创 2018-07-12 23:49:53 · 174 阅读 · 0 评论 -
sprintf()
response_line(nc,200,"Content-Length;760")改成如下:char tt_buf2[25];sprintf(tt_buf2, "Content-Length:%d\r\n", strlen(p));mg_send_response_line(nc, 200, tt_buf2);即实现具体的数字760变成strlen(p)的长度。这也是字符串拼接的用法。...原创 2018-03-29 13:47:08 · 205 阅读 · 0 评论