C/C++
文章平均质量分 53
代码一天不写我浑森蓝廋
防民之口,甚于防川。川壅而溃,伤人必多,民亦如之。
展开
-
facebook开源工具atosl在Linux和macOS下编译安装
的工具,但facebook从2013年开始就不再维护这个项目了,官方介绍的编译方式现在也有一定的问题,一番摸索后终于编译成功,现将过程记录一下。库,这个库原本是可以用apt-get直接安装的,但这个库一直在不断迭代,版本和最新的版本已经有很大的出入,有些方法已经被移除,导致。是一个可在linux环境下运行的部分替代macOS上。,再安装旧版,这里选用版本。这时报了另一个错,是由于编译。解决办法卸载当前已安装的。再次编译atosl。...............原创 2022-07-17 18:56:08 · 663 阅读 · 1 评论 -
从递归(代码)的角度理解二叉树的先序/中序/后序三种遍历顺序
二叉树的遍历原理其实是很简单的,就是从二叉树的根节点开始,把它的左节点以及左节点下面的节点再当作一棵二叉树,和右节点以及右节点下面的节点也再当作一棵二叉树,依此类推,直到节点下面没有节点为止。二叉树的有三种遍历顺序:先序遍历、中序遍历、后序遍历,而这个顺序都是以根节点作为参照的,最先遍历根节点就是先序遍历,最后遍历根节点就是后序遍历,根节点放在左右节点之间的情况就是中序遍历。先看代码:#inclu...原创 2018-04-28 20:11:46 · 14406 阅读 · 1 评论 -
FastCGI协议详解及代码实现
FastCGI协议是在CGI协议的基础上发展出来的,如果想了解CGI协议,可以看我另一篇文章:动态web技术(二) --- CGI,FastCGI程序本身监听某个socket然后等待来自web服务器的连接,而不是像CGI程序是由web服务器 fork-exec,所以FastCGI本身是一个服务端程序,而web服务器对它来说则是客户端。FastCGI程序和web服务器之间通过可靠的流式传输(原创 2017-12-27 20:30:07 · 12890 阅读 · 4 评论 -
Linux下编译安装openssl不生成动态链接库.so的问题解决
使用官方提供的config命令默认竟然没有生成 .so,解决办法执行 ./config 时增加参数 shared,例如:./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl -Wl,-rpath,/usr/local/ssl/lib shared然后 make && make install 即可原创 2018-01-11 00:08:25 · 11594 阅读 · 0 评论 -
简单易懂的C语言实现双向链表代码
链表是一种常见的数据结构,链表中的每一个节点都保存了上一个或下一个元素的位置,所以表现为增删元素效率较高,查找元素效率较低简单的C语言实现代码:#include #include #include //节点结构体,每个节点分别保存了一个指向前一个节点的指针和指向后一个节点的指针,以及保存数据的指针struct _node{ void *prevNode; void原创 2017-12-01 14:01:58 · 14570 阅读 · 1 评论 -
C语言利用setjmp和longjmp实现异常处理
C语言相比C++和Java没有提供异常处理机制,比如 try / catch 机制,但是我们可以使用C语言中的 setjmp / longjmp 方法来模拟出一种类似的异常处理机制。这两个函数定义在 setjmp.h 头文件中, C文档中对于这两个方法的解释如下: int setjmp(jmp_buf env);void longjmp(jmp_buf env, int val原创 2017-07-28 15:23:44 · 960 阅读 · 0 评论 -
C语言实现用指定字符切割字符串并返回数组
C语言没有提供类似JS中split和PHP中的explode方法,只有一个不太好用的strtok, 但是像用 , 去切割字符串 “aaa,bbb,ccc,ddd” 返回一个字符串数组的功能还是比较常用的,所以自己实现了一个类似的方法,实现的过程还是比较麻烦的,代码仅供参考,如有更好的方法欢迎大家交流提高。#include #include #include //返回一个 char *原创 2017-08-03 00:53:33 · 14285 阅读 · 0 评论 -
C开发lua模块(一) --- 虚拟栈和基本代码结构
lua是一门小巧高效的脚本语言,核心代码不到500kb,由于要保持小巧,所以lua的核心库功能不可能很复杂,只实现一些基本功能,甚至没有操作目录的API,但由于lua良好的设计,并且是用标准C开发,所以很容易用C语言来扩展lua的功能。用C编写lua模块需要遵循一定的规则,由于C和lua中的数据结构是完全不一样的,并且lua函数可以返回多个结果,所以要有一种在lua脚本和C函数之间交换数据的机原创 2017-08-05 12:28:43 · 2480 阅读 · 0 评论 -
C开发lua模块(二) --- 操作table和调用lua函数
此篇是上篇入门篇的后续文章,上篇地址:http://blog.csdn.net/zhang197093/article/details/76400871C语言没有类似 lua_pushtable 和 lua_totable 的方法,这也很容易理解,因为C语言中没有一种数据类型可以和lua中的table相对应的,那C函数怎么操作table类型的参数或者返回table类型的结果呢,lua API中原创 2017-08-06 21:10:41 · 10960 阅读 · 1 评论 -
C开发lua模块(三) --- 返回userdata和结构体指针
到目前为止,我们写的C函数都还是单个的函数,函数之间没有联系,也没有涉及返回C结构体以及指针,但实际的业务场景中肯定不会这么简单,比如我们现在要扩展lua使之能够操作redis,首先至少需要一个连接redis服务器的方法并返回一个连接句柄,然后用这个连接句柄来进行各种查询,最后使用结束还需要关闭这个连接句柄,通常来说,这个连接句柄会是一个结构体,那问题是该怎么返回这个结构体给lua呢。用C操作原创 2017-08-16 16:07:29 · 2952 阅读 · 0 评论 -
C语言可变参数 va_start, va_arg, va_end使用介绍
我们常用的打印函数printf就是一个可变参数的函数,参数个数并不是固定的,函数原型为:int printf(const char *format, ...);这就是一个典型的变参函数,其中的变参用三个点 ... 表示。那么该如何编写自己的变参函数呢,这就要用到处理变参的三个方法:va_start, va_arg, va_end , 这三个方法包含在头文件 stdarg.h 中,这三个原创 2017-07-30 18:17:48 · 3431 阅读 · 0 评论