Linux
文章平均质量分 75
王二の黄金时代
碰到问题,就解决问题
展开
-
自实现简单的c内存泄漏检测工具
成熟的内存泄漏检测工具很多,比如:valgrindhttps://www.valgrind.org/原创 2021-06-19 14:59:34 · 318 阅读 · 0 评论 -
本地套接字,在线手动调试主程序
一个已经串联起来一堆功能的程序,现在想修改其中某一个模块的功能,比如音视频编码在程序已经运行的过程中动态调整码率,没有完善的单元测试接口,着实苦恼,想到一个简单的方式,在现有的代码上嵌入一个local socket 服务,另外写一个小程序connect进去给它发信息,来触发我们实现的功能调用,如此即可手动在线调试。 (这不是gdb等的debug调试,也就是一个进程间通信的应用)上代码:个人在android上调试jni库的一个功能调用使用,用ndk编译之后将编译的debug_client可执行文件push原创 2021-01-21 16:52:52 · 255 阅读 · 0 评论 -
linux c代码获取当前进程打开了哪些文件
查看当前进程打开了哪些文件, (同一个线程之间共享进程打开的文件描述符), 如果是在linux终端,可以 lsof -p pid 即可查看对应进程打开的文件,或者查看 proc/pid/fd, 现在想要在代码中获取当前程序打开了哪些文件, 也可以通过 读取 proc/pid/fd进行查看,如下:如果权限允许的话也准备将改demo写成jni给到app中使用,可以方便查看app具体打开占用了哪些文件。demo结果:同 ls -lh /proc/pid/fd 效果一样,左边是对应的文件描述符 fd值,右边是指原创 2020-09-18 15:51:25 · 1031 阅读 · 0 评论 -
linux开发coredump 使用
(适用于无法直接跑gdb(比如内存不够,一跑就挂),或跑了gdb就没有错误了原理:由于系统关键/核心进程,产生严重的无法恢复的错误,为了避免系统相关资源受到更大损害,操作系统都会强行停止运行,并将当前内存中的各种结构,核心进程出错位置及其代码状态,保存下来,以便以后分析。最常见的原因是指令走飞,或者缓冲区溢出,或者内存访问越界。走飞就是说代码流有问题,导致执行到某一步指令混乱,跳转到一些不属于...原创 2018-05-06 10:12:55 · 1013 阅读 · 0 评论 -
linu进程间通信,线程间同步
(以下纯属个人见解)对于进程,多数的关注重点是在于 两个进程之间的通信,其实也存在同步的机制包含在"通信"里面,只是不同的进程拥有独立的地址空间,互不干涉,所以重点在于怎样让连个进程进行数据往来交流。而线程,属于同一个进程创建的线程本来就是共享一些资源,所以讨论的侧重点也就不在于交流数据,而在于并发的时候怎么确保其和谐相处而不至于对一些公用的资源进行不合理的并发访问。这就是同步。但是对于...原创 2019-07-09 22:44:10 · 367 阅读 · 0 评论 -
VMware虚拟机ubuntu指定使用主机的wifi无线网卡
笔记本接有内网有线网络,可以通过内部代理上网,而安装的虚拟机却因为内网限制,无法通过 主机的有线网卡访问网络。怎么让虚拟机使用主机的wifi网卡来上网?而主机自身用有线网卡?可以配置VMware的设置,让其内部的虚拟机(不管虚拟机装的是ubuntu 还是 wind xp,和虚拟机系统无关)桥接到wifi物理网卡上1.0 先对VMware进行虚拟网卡的配置。如下图,点击左上的Workstati...原创 2019-05-17 11:43:27 · 19667 阅读 · 4 评论 -
c c++宏定义使用编译器展开宏定义
最近研究VLC源码,对于其中模块加载对接部分很是困惑,跟踪代码的时候总会有断掉线索的嫌疑,因为其中就很多用函数指针+宏定义来实现的,对于其中的宏定义实现的函数定义,自行展开宏定义去分析很是麻烦,还不可靠,可以直接使用编译器可展开得到原代码,查看起来比较方便。参考下这位朋友写的编译器的编译过程:(瞬间感觉掌握了一项黑科技,宏定义什么的统统原创 2019-02-18 17:12:40 · 3008 阅读 · 0 评论 -
网络数据包片段拼合(连续h264片段拼接成完整h264帧 (纠正下是h264 slice))(二)支持c++调用)
上一篇的改进,支持c++,主要是对 C++ 类成员函数作为外部回调的处理。关于这个c++ 类成员函数作为回调函数,还是有点意思的,有其他博文介绍的好几种方法,后续再论。代码:/******20181221 canok*** brief : Combine data fragments into complete frames*** input : Continuous dat...原创 2018-12-26 11:44:15 · 977 阅读 · 0 评论 -
网络数据包片段拼合(连续h264片段拼接成完整h264帧)--纠正下,是h264 slice,不是图像帧
最近项目用的网络摄像头,从网络层获取到连续的h264片段数据,于是写了一个将连续输入数据按 指定字符串分割成一个slice数据的 class, 稍作改动,也可以用来处理 文本文件中查找 替换等等功能,或者从一个h264文件中分离出单独的h264帧linux 环境 ubunt 上已测试,编译:g++ *.cpp -lpthread用到了回调,但是没有处理C++成员函数作为回调问题,后续改良...原创 2018-12-24 16:48:43 · 2912 阅读 · 0 评论 -
网络数据包片段拼合(连续h264片段拼接成完整h264 slice)(三)循环体移到外部调用,便于调用者控制
继上一篇的优化改进,将主控制权交给外部调用者。代码:/******20181221 canok*** brief : Combine data fragments into complete frames*** input : Continuous data flow, support fix length data input;*** output: complete fra...原创 2018-12-26 16:09:55 · 984 阅读 · 0 评论 -
linux 内核中数据结构kfifo的实现
都说这里很巧妙,那么巧妙在哪里呢?从需求出发,来分析为什么要这么做。队列介绍:1.0 为了确保 环形队列的size = in - out 始终计算正确.如果每次增加in和out后都对in 和 out 取模,即in = in%size; 以确保 0<in<size 0<out<size那么在一种情况下:当in因为超出而被取模给截短了,size的计算就...原创 2018-08-08 18:16:58 · 767 阅读 · 0 评论 -
linux 代码获取ip地址mac地址
分析了下ifconfig 源码,(建议必应搜索net-tools 国外源码下载,百度出来的多是csdn下载还要积分)。ifconfig 是net-tools软件包中的其中一个工具,源码的分析就不赘述了。下面是从中提取修改出来的获取 mac ,ip 地址的源码,通过ioctrl 直接和内核(驱动)进行数据交互,有兴趣也可以再写个设置IP的 :设置ip 调用以下几个//SIOCSIFA...原创 2018-08-05 17:05:41 · 2931 阅读 · 1 评论 -
Linux 查看进程打开的文件
1.0 使用命令 lsof (不过一般嵌入式设备,不会再设备上集成这个工具)2.0 通过 proc文件查看top 得到进程号,然后进到对应目录:/proc/对应进程pid/fd在fd目录 -ls -lh 就能看到对应文件描述符和关联的文件路径/proc/pid/ 下面还有其他关于该进程的信息...原创 2018-07-27 16:45:53 · 7347 阅读 · 0 评论