c
ou叮当
这个作者很懒,什么都没留下…
展开
-
Linux 动态装载库(dlopen)
Linux有时我们需要在运行时指定库的路径去加载库,而不是依赖于系统自动动态链接。比如说我们在需要做到动态加载库插件时就会用到动态装载库的特性(比如像lighthttpd和nginx的动态mod功能),Linux提供了函数来帮助我们做到这件事,主要的几个函数为:dlopen,dlsym,dlclose栗子假设我们一个项目可能会需要加载不同版本的库v1和v2,我们希望在配置文件中实现可配置加载哪个库,原创 2017-08-21 23:26:37 · 7198 阅读 · 0 评论 -
一个换行符引发的“血案”
今天项目发生了一件很有意思的事情,案件很离奇。案件的经过是这样的:案件经过我们在写一个库对接硬件平台和第三方模块,库封装了一些平台有关的接口给第三方使用,但是当我们把对接第三方模块的时候对方服务器报错了,服务器方反馈上报的某个参数有误。然后我们发现参数的确有误://本来参数在终端应该是这么显示的//printf("abc=[%s]", efg)abc=[efg]//但是结果是这样的[bc=[原创 2017-09-15 19:26:39 · 4657 阅读 · 0 评论 -
分治法计算乘幂
如果直接重复相乘的方法需要n次乘法,如果利用递归的方法分解子问题,只要log2n的复杂度。#include <stdio.h>#include <stdlib.h>#include <string.h>int count = 0;unsigned long long power1(int x, int n) { unsigned long long ret = 0; if(n =原创 2017-11-12 15:58:35 · 1102 阅读 · 0 评论 -
Makefile编译当前目录下所有c文件到共享库
在编写c的项目的时候有时候把接口文件都放在一个目录下,并且需要打包成一个共享库,这时候我们充分的利用通配符和函数就可以不用把所有文件都一一写出来了。OBJS := $(patsubst %.c, %.o, $(wildcard *.c))OUTLIB := libmyapi.soCFLAGS := -fPIC -I.CFLAGS += -I ../myapiall: $(OBJS) $(OUTL原创 2017-11-29 17:34:25 · 8697 阅读 · 0 评论 -
ubus实现进程间通信
上一篇文章介绍了ubus的组件和实现原理,本文通过代码实例介绍使用ubus进行进程间通信的三种方式。1. invoke的方式实现端对端通信最简单的情景就是一个提供服务的server端,一个请求服务的client端,client请求server的服务。下面的例子中,server注册了一个名为“scan_prog”的对象,该对象中提供一个“scan”方法:ubus_invoke.h:转载 2017-12-02 10:45:52 · 4794 阅读 · 0 评论 -
protocol buffers c语言的使用
以下源码示例来源于https://github.com/protobuf-c/protobuf-c/wiki/Examples 定义消息message AMessage { required int32 a=1; optional int32 b=2;}安装protobuf-c我们需要把proto文件编译成c源码,才能在代码中使用,所以需要用到官方的编译工具sudo apt-get原创 2017-11-27 16:28:08 · 4807 阅读 · 0 评论 -
byte转int的问题,unsigned char和char
ps:其实这篇文章我是想不出叫什么名字了。。。。。。 事情是这样的,最近用java把一个4 byte转成int,于是写出了这种代码:int dataSize = ((dataSizeArray[3]) | (dataSizeArray[2]) 这段代码的问题是什么,上面的过程byte被隐式转换成int再移位求或,byte[0] = 0x81 (-127),我们本意是转成这样0x000原创 2018-01-19 11:00:34 · 1141 阅读 · 0 评论