Linux
ou叮当
这个作者很懒,什么都没留下…
展开
-
Linux下fd泄露的定位
之前在公司写过一个生产工具,通过读写某个驱动节点实现设备信息更改的功能,结果测试拷机两小时必挂,一看内核打印“打开文件失败”,perror了之后打开文件太多了,这时候我就猜到是fd(句柄)泄露了。句柄泄露是怎么回事呢,linux打开文件通常都是open返回一个fd的形式,操作系统会维护当前进程打开文件的记录,但是数量是被限制的,操作系统能打开的fd总和也是有限的,如果进程一直打开文件而不关闭,那么当原创 2017-08-10 09:17:21 · 17827 阅读 · 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 评论 -
perf之timechart(系统性能图形化分析工具)
perf record可以统计系统在一段时间内,进程的性能表现,但是其结果不适合直接阅读,有很多图形化工具可以把其结果转换成图形界面的方式,而perf自带了timechart分析工具,当然它只记录了进程粒度上的表现,还是替代不了火焰图这种可以在函数级别上进行分析的工具,最好可以配合使用。原创 2017-11-06 10:07:58 · 15017 阅读 · 1 评论 -
http进行wifi认证的设计思路
目前很多家庭的wifi被客人“万能钥匙”自动分享,导致家里wifi慢的可怜,这次回家就看到家里的wifi的dhcp服务器上挂满满的各种陌生的客户端,其实来了家里都是朋友肯定不会去主动分享密码的,于是我想wifi密码改来改去的还是被一些“小人软件”自动分享了,有没有什么方法来抵抗这个呢,当然一般路由器可以隐藏ssid和或者绑定mac的方式可以解决,但是这个对于客人来说太不友好了,主人家也麻烦。所以突发原创 2017-10-22 00:16:25 · 11093 阅读 · 0 评论 -
Linux Pipe (进程间通信,生产者消费者)
PIPE是Linux下可以用来实现进程间通信的一种手段,当我们调用pipe系统调用时,将会产生一对文件描述符,fd[0]可以用来读,fd[1]用来写,fd[1]写的数据将会在fd[0]中读到,我们称之为管道。进程之间可以依赖管道的方式实现进程间通信,pipe是半双工的,所以如果要实现pipe之间互相通信的话,需要建立2对pipe。下面我们演示用pipe实现父进程生产数字,子进程消费数字并排序的一个程原创 2017-09-13 10:41:20 · 5539 阅读 · 0 评论 -
Linux FIFO (进程间通信,生产者消费者)
上一篇中我们写到了PIPE无名管道,的确是一种很方便的通信机制,但是其有一个缺点就是,PIPE是依赖于文件描述符的,并不在文件系统中维护,如果两个通信进程之间没有共同的祖先,他们就无法拿到相同的文件表项,所以没有共同祖先的两个进程是不能通过PIPE直接通信的。为此Linux提供一种称为有名管道称为FIFO来解决,FIFO是一种全双工的管道,先进先出,并且在磁盘有索引节点,这样只要进程知道FIFO文件原创 2017-09-14 20:51:24 · 5509 阅读 · 0 评论 -
Linux 动态装载库(dlopen)
Linux有时我们需要在运行时指定库的路径去加载库,而不是依赖于系统自动动态链接。比如说我们在需要做到动态加载库插件时就会用到动态装载库的特性(比如像lighthttpd和nginx的动态mod功能),Linux提供了函数来帮助我们做到这件事,主要的几个函数为:dlopen,dlsym,dlclose栗子假设我们一个项目可能会需要加载不同版本的库v1和v2,我们希望在配置文件中实现可配置加载哪个库,原创 2017-08-21 23:26:37 · 7198 阅读 · 0 评论 -
Linux oom-killer的问题
Linux oom-killer的问题 今天遇到了一个奇怪的问题,往一块嵌入式开发板上写文件当文件写入到一定长度时程序就会出现fault,整个程序死掉。发现串口下出现了oom的打印什么是oom-killer?OOM killer(Out Of Memory killer)是Linux下的一套内存保护机制,当设备内存低于某一个阈值时,会选择性的杀掉一些程序来释放内存。如何修改阈值echo xxx原创 2017-07-08 15:04:43 · 10736 阅读 · 0 评论 -
vagrind检测内存泄露
今天想检测自己写的一段代码有没有内存泄露,于是想到了googleperf和vagrind,对比了一下,vagrind能检测出一处内存泄露,而googleperf却没有,不知道是什么原因,这两个工具的原理也不太一样,vagrind的在自己的模拟环境下跑的,而googleperf是通过链接自己的tcmalloc的方式来实现。vagrind检测内存泄露的方法是这样的:方法valgrind --leak-c原创 2017-11-23 11:02:17 · 2397 阅读 · 0 评论