C
一路奔跑94
业精于勤荒于嬉,行成于思毁于随!
展开
-
make: 警告:检测到时钟错误。您的创建可能是不完整的
这个问题的原因,主要是文件的访问时间与修改时间,在当前的linux系统时间之后。解决方法如下:运行以下命令find . -type f -exec touch {} \;即,更新所有的文件访问时间与修改时间为当前系统时间。然后make一下,解决。...原创 2020-02-10 14:18:15 · 324 阅读 · 0 评论 -
C语言经典面试题 与 C语言面试宝典
1预处理问题1:什么是预编译?何时需要预编译?答:预编译又称预处理,是整个编译过程最先做的工作,即程序执行前的一些预处理工作。主要处理#开头的指令。如拷贝#include包含的文件代码、替换#define定义的宏、条件编译#if等。.何时需要预编译:1、总是使用不经常改动的大型代码体。2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,...转载 2019-11-10 08:21:40 · 317 阅读 · 0 评论 -
GDB调试
https://www.cnblogs.com/HKUI/p/8955443.html GDB调试启动程序准备调试GDB yourpram或者先输入GDB然后输入 file yourpram然后使用run或者r命令开始程序的执行,也可以使用 run parameter将参数传递给该程序参数列表 命令 命令缩写 命令说明...转载 2019-01-09 10:00:02 · 162 阅读 · 0 评论 -
htonl、ntohl、htons、ntohs函数实现
typedef unsigned short int uint16;typedef unsigned long int uint32;//短整型大小端互换#defineBigLittleSwap16(A) ((((uint16)(A) & 0xff00) >> 8) | \(((uint16)(...转载 2019-03-25 17:59:34 · 871 阅读 · 0 评论 -
CLion 实现远程调试
CLion 是 JetBrains IDE 全家桶产品之一,可以用来开发 C/C++ 项目,而 GDB 则可以用来对 C/C++ 程序进行调试。作为一款调试器,GDB 为程序开发人员提供了强大的调试功能,但却需要使用命令来执行调试操作,操作起来不是很方便。(有关 GDB 的使用,可以参考文章《GDB 调试》。)为此,CLion 为程序开发人员提供了图形化的调试界面以方便调试。另外,CLion ...转载 2019-03-29 14:30:06 · 17607 阅读 · 3 评论 -
c++简单的ATL COM开发和调用实例
1、打开VS2010,新建ATL COM 项目,步骤:“文件” --》“新建” --》“项目”,选择“Visual C++” --》“ATL 项目” ,填写“名称” FirstCOM --》“确定”。2、ATL 项目向导,勾选 【支持COM+ 1.0】和【支持部件注册器】,其他默认,点击完成。3、切换到类视图,右键单击项目“FirstCOM”--》“添加” --》“类”。4...转载 2019-04-12 11:44:45 · 1157 阅读 · 0 评论 -
动态载入DLL所需要的三个函数详解
动态载入 DLL动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数。方法是:用 LoadLibrary 函数加载动态链接库到内存,用 GetProcAddress函数动态获得 DLL 函数的入口地址。当一个 DLL 文件用 LoadLibrary 显式加载后,在任何时刻均可以通过调用 FreeLibrary 函数显式地从内存中把它给卸载...转载 2019-04-12 16:38:53 · 2519 阅读 · 1 评论 -
使用cJson 报错:cJSON.c:(.text+0x4aa): undefined reference to `pow'
编译报错:原因:使用了#include<math.h>忘记了链接动态库 加一个-lm 即可,小问题记录一下,最近记性不好…………顺带加一个cJson 的源码地址:https://sourceforge.net/projects/cjson/?source=directory...原创 2019-04-19 15:56:04 · 4496 阅读 · 1 评论 -
Linux下如何查看系统启动时间和运行时间以及安装时间
1.uptime命令输出:16:11:40 up 59 days, 4:21, 2 users, load average: 0.00, 0.01, 0.002.查看/proc/uptime文件计算系统启动时间cat /proc/uptime输出: 5113396.94 575949.85第一数字即是系统已运行的时间5113396.94 秒,运用系统工具date即可算出系统启动时间...转载 2019-05-10 18:30:29 · 637 阅读 · 0 评论 -
JNI中string 、 char* 和 jstring 两种转换
亲测有效jstring 转 c char 数组// java中的jstring, 转化为c的一个字符数组 char* Jstring2CStr(JNIEnv* env, jstring jstr,jsize *alen) { char* rtn = NULL; jclass clsstring = (*env)...原创 2019-05-31 14:21:53 · 1786 阅读 · 0 评论 -
值得推荐的C/C++框架和库 (真的很强大)
值得学习的C语言开源项目- 1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/~cz2...转载 2019-06-06 14:31:03 · 2437 阅读 · 1 评论 -
C语言实现HTTP的GET和POST请求
HTTP请求和IP/TCP所谓的HTTP协议是基于IP/TCP协议的, 所以要获取远端的html数据只要创建socket对象就足够了;HTTP是基于IP/TCP加上了网络请求的固定格式get 请求#include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#include ...转载 2019-06-06 17:28:11 · 26528 阅读 · 1 评论 -
C/C++使用libcurl库发送http请求
C++要实现http网络连接,需要借助第三方库,libcurl使用起来还是很方便的环境:win32 + vs2015如果要在linux下使用,用cmake编译,使用基本同理1,下载编译libcurl下载curl源码,找到vs工程,按照x86 x64 并对应debug和release编译出静态库lib2,构建工程1)curl头文件和lib拷贝到工程目录2)配置...转载 2019-06-10 15:38:45 · 1167 阅读 · 0 评论 -
Linux程序调试--Bus Error
Linux程序调试--BusErrorBus Error究竟是指什么一 Bus Error,即总线错误。 引发原因:CPU出于性能方面的考虑,要求对数据进行访问时都必须是地址对齐的。如果发现进行的不是地址对齐的访问,就会发送SIGBUS信号给进程,使进程产生 core dump。RISC包括SPARC(一种微处理器架构)都是这种类型的芯片。x86系列CPU都支持不对齐访...转载 2019-06-28 16:39:12 · 3517 阅读 · 0 评论 -
Size_t和int区别
(1)size_t和intsize_t是一些C/C++标准在stddef.h中定义的。这个类型足以用来表示对象的大小。size_t的真实类型与操作系统有关。在32位架构中被普遍定义为:typedef unsigned int size_t;而在64位架构中被定义为:typedef unsigned long size_t;centos7 64bit...转载 2019-07-01 11:39:37 · 4710 阅读 · 0 评论 -
Makefile 编译各个子目录下的Makefile文件
首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的。意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文件直接复制到相应目录即可方便编译出所有文件。这些makefile文件是通用的,只需根据自己的工程情况改动少许内容即可。下面会说。总体思路是:把目标文件放在debug文件夹下的obj目录下,把最终...原创 2019-07-27 16:59:02 · 14784 阅读 · 0 评论 -
Makefile之patsubst
经常要手写项目的Makefile,或者看其他项目的遗留项目的Makefile,有些makefile内置函数常用,却用完就忘记了,最近项目中使用patsubst,感觉挺好用的格式:$(patsubst <pattern>,<replacement>,<text> )名称:模式字符串替换函数——patsubst。功能:查找<text...转载 2019-07-28 14:45:13 · 517 阅读 · 0 评论 -
GDB 调试跟踪系统函数报错解决方案
报错提示: (gdb) file testReading symbols from /root/worker/test...done.(gdb) b memcpyBreakpoint 1 at 0x4004a0(gdb) rStarting program: /root/worker/test Breakpoint 1, 0x00007ffff7df5fa0 in memcp...原创 2019-01-11 18:03:32 · 821 阅读 · 0 评论 -
pthread_mutex_t 和 pthread_cond_t 配合使用的简要分析
1.原理假设有两个线程同时访问一个全局变量 n,这个全局变量的初始值等于0。Int n = 0 ; 消费者线程 A 进入临界区,访问 n,A 必须等到 n 大于 0 才能接着往下执行,如果 n== 0,那么 A 将一直等待。 还有一个生产者线程 B,B 进入临界区,修改 n 的值,使得 n >0,当 n > 0 时,B 通知等待 n &...转载 2018-12-26 10:27:46 · 655 阅读 · 0 评论 -
hmac-sha1加密算法C源码示例
HMAC: Hash-based Message Authentication Code,即基于Hash的消息鉴别码 在各大开放平台大行其道的互联网开发潮流中,调用各平台的API接口过程中,无一例外都会用到计算签名值(sig值)。而在各种计算签名的方法中,经常被采用的就是HMAC-SHA1,现对HMAC-SHA1做一个简单的介绍:HMAC,散列消息鉴别码,基于密钥的Hash算法认证协议。实现原理为...转载 2018-05-21 15:41:20 · 6116 阅读 · 0 评论 -
struct timeval tv 存储大小未知
void main(){ struct timeval tv; gettimeofday( &tv,NULL ); printf( "sec is %d,usec is %d\n",tv.tv_sec,tv.tv_usec ); }利用gcc gettimeofday.c -o gettimeofday 编译 提示错误...原创 2018-08-15 15:45:24 · 4901 阅读 · 2 评论 -
C语言操作OpenLDAP
参考:http://www.cnblogs.com/zhumao/archive/2005/08/13/214258.html步骤:包括openldap,netscape(sun),mozilla, novell,ibm等,都提供了LDAP的C SDK和接口函数。作为RFC标准的LDAP结构,struct LDAP是定义为对用户隐藏的,并在各个实现函数中各自定义,以便适应不同的LDAP访问...转载 2018-08-15 15:58:00 · 788 阅读 · 0 评论 -
linux 创建连接命令 ln -s 软链接
这是linux中一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件。当 我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的 目录下用ln命令链接(link)它就可以,不必重复的占用磁...转载 2018-08-28 17:45:37 · 1049 阅读 · 0 评论 -
c 标准和c++标准
C语言的发展阶段C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言。1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。 20世纪60年代,美国AT&T公司贝尔实验室(AT&T Bell Labo...转载 2018-08-29 10:16:49 · 19960 阅读 · 0 评论 -
C++中string、char *、char[]的转换
头段时间有人问过我这个问题,可是我一点头绪都没有,直接说不会。现在从网上找了点资料,看了看,知道点东西了。 一、string转char*。 主要有三种方法可以将str转换为char*类型,分别是:data(); c_str(); copy(); 1.data()方法,如:1 string str = "hello";2 const char* p = str.data()...转载 2018-08-29 11:31:55 · 140 阅读 · 0 评论 -
c 使用正则表达式
据说一个好的程序员是会使用DB和Regular Expression的程序员,可见两者是多么重要。正则表达式是能极大地提高工作效率的工具,使用过Linux下各种具备RE特性的工具的人一定对此深有感触。很多语言都支持RE,用的最多的当然是脚本,其中以perl最盛。不过,用C语言来用RE不是很多见,但是有时候也很有用,我最近也是看到别人说道这个,所以搜了一些资料加上自己的体会来说一说RE在C语言里的应...转载 2018-09-04 15:03:11 · 3027 阅读 · 0 评论 -
C 内存泄漏检测工具
所有使用动态内存分配(dynamic memory allocation)的程序都有机会遇上内存泄露(memory leakage)问题,在Linux里有三种常用工具来检测内存泄露的情況,包括:mtrace dmalloc memwatch1. mtracefrom:mtrace是三款工具之中是最简单易用的,mtrace是一个C函數,在<mcheck.h>里声明及定义...转载 2018-09-11 13:30:45 · 1775 阅读 · 0 评论 -
assert 断言函数的使用
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息, 然后通过调用 abort 来终止程...原创 2018-09-05 09:47:49 · 987 阅读 · 0 评论 -
C/C++快速读写磁盘数据的方法-块读取/异步/优化分析算法/内存文件映射的原理和使用
快速读写磁盘数据的方法:1.块读取:一下子将数据读取到内存的(无论是文本还是二进制),而不是一行行的读取。2.异步的IO,创建多线程,或者使用重叠IO,IO复用,异步的事件回调通知机制(可以用事件对象,信号驱动来实现)。3.优化分析文件的算法和尽量延后分析,分析算法里面频繁的申请字符串内存和释放字符串内存,尽量用指针解析出来,分析文件的内容可以延期到使用的时候才分析。如果不注意,不...转载 2018-10-19 10:49:50 · 2939 阅读 · 0 评论 -
C++项目中的extern "C" {}
引言在用C++的项目源码中,经常会不可避免的会看到下面的代码:C++ 1 2 3 4 5 6 #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __cplusplus } #endif它到底有什么用呢,你...转载 2018-10-25 14:03:23 · 5711 阅读 · 0 评论 -
"undefined reference to" 问题解决方法
最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13): undefined reference to `func' 关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1. 链接时缺失了相关目标文件(.o)...转载 2018-11-26 11:00:58 · 1339 阅读 · 0 评论 -
ASN1_TIME 和 TIME_T转换
Openssl 代码中提供了函数 ASN1_TIME_set ,把 time_t 格式的时间转化为 ASN1_TIME函数原型为ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t)但是没有找到类似 ASN1_TIME_get 函数,把 ASN1_TIME 转化为 time_t下面是一个ASN1_TIME_get 测试可用int my...原创 2018-12-27 17:34:45 · 5143 阅读 · 0 评论 -
OpenSSL 常用函数——证书操作
OpenSSL 常用函数——证书操作现有的证书大多采用X. 509规范,主要由以下信息组成:版本号、证书序列号、有效期、所有者信息、发行者信息、其他扩展信息、所有者公钥、CA的上述信息签名。一种OpenSSL实现了对X. 509的所有数字证书操作。它包括发放数字证书、解析和验证证书等一种证书操作涉及的主要功能有证书验证(证书链、有效期、CRL)、证书解析(证书版本、序列号、发行人信息、主体信息...转载 2018-12-27 20:39:20 · 1909 阅读 · 0 评论 -
C标准:C90、C99、C11
C语言原来是没有统一的标准的,第一个标准是90左右确定的,内容较以前有些改进: 1、增加了真正的标准库; 2、新的预处理命令与特性; 3、函数原型允许在函数申明中; 4、指定参数类型一些新的关键字,包括 const、volatile 与 signed; 5、宽字符、宽字符串与多字节字符; 6、对约定规则、声明和类型检查的许多小改动与澄清;后来到了...转载 2018-12-31 14:40:44 · 9029 阅读 · 2 评论 -
一个小错误: deprecated conversion from string constant to char*错误的修改
当我们将一个character pointer variable 初始化成一个string literal的时候, 就会出现此类错误。在最新的C标准或者C++标准中, 使用如下语句, 无论使用gcc 或者g++命令, 都会报出上面的错误, 不能通过编译: char* x = "hello";修改方案如下。sol1: char* 改为const char* 修饰即可:&l...转载 2018-12-25 21:10:39 · 529 阅读 · 0 评论 -
C语言中time函数和localtime获取系统时间和日期
C语言中time函数和localtime获取系统时间和日期 可以通过time()函数来获得计算机系统当前的日历时间(Calendar Time),处理日期时间的函数都是以本函数的返回值为基础进行运算。1. time 函数 返回1970-1-1, 00:00:00以来经过的秒数 原型: time_t time(time_t *calptr) 结果可...转载 2018-05-18 09:51:47 · 14744 阅读 · 0 评论