
C语言
RyanLeiWang
主业:软件工程师/程序员/没有土地的码农; 业余:贫困linux黑客/android开源系统贡献者; 副业: 不入流经济学家/3流投资家
展开
-
Linux 下的 AddressSanitizer
AddressSanitizer 是一个性能非常好的 C/C++ 内存错误探测工具。它由编译器的插桩模块(目前,LLVM 通过)和替换了 malloc 函数的运行时库组成。这个工具可以探测如下这些类型的错误:对堆,栈和全局内存的访问越界(堆缓冲区溢出,栈缓冲区溢出,和全局缓冲区溢出) UAP(Use-after-free,悬挂指针的解引用,或者说野指针) Use-after-return(无效的栈上内存,运行时标记 ASAN_OPTIONS=detect_stack_use_after_return转载 2020-12-08 10:58:02 · 949 阅读 · 0 评论 -
怎样实时判断socket连接状态?
摘自:https://www.cnblogs.com/embedded-linux/p/7468442.html对端正常close socket,或者进程退出(正常退出或崩溃),对端系统正常关闭这种情况下,协议栈会走正常的关闭状态转移,使用epoll的话,一般要判断如下几个情况 处理可读事件时,在循环read后,返回结果为0 处理可写事件时,write返回-1,errno为EPIPE EPOLLERR或EPOLLHUP或事件 对端非正常断开,比如服务器断电,网线被拔掉这种情况下,协转载 2020-12-07 18:03:38 · 9649 阅读 · 0 评论 -
在Linux系统里使用SS命令获取TCP RTT
在Linux下的TCP通讯,如果能通过工具实时的获取某TCP通讯的RTT,就能比较清楚得知道当前网络TCP通讯的拥塞程度,在一定程度上对网络拥塞做出量化数据,记录历史日志。问题是,有什么工具或办法直接拿到RTT数据呢?------------------摘自某个被TCP通讯中的timeout搞得头痛的码农什么是TCP的RTT?这个还是网上搜索科普吧。这里将范围缩小,我们讨论的目标是如何对一个正在运行的socket(TCP)通讯应用,做一个RTT的Benchmark。如何测试硬件系统和操作系统本身带原创 2020-12-07 17:01:31 · 1999 阅读 · 0 评论 -
linux程序依赖的第三方库相互冲突问题
Linux下的软件开发,因为有着众多的开源项目助力,开发难度应该降低很多才是。但是如果用的开源库太多了,偶尔也会遇到2个开源库相互冲突的问题。好比正在干活,有2个好朋友一起过来帮忙,但是活没有干完,这2个好朋友却先起冲突干起来了。人在江湖,朋友多了,似乎朋友之间的矛盾也成了自己的矛盾。-------------------------摘自某某码农开发笔记。特别是在纯C的软件开发中,如果依赖的2个第三方库,有同名的函数,变量或宏定义,那么麻烦就大了去了。有人说,难道编译不过吗?不是,还真不影响编译。但就是原创 2020-11-26 21:11:56 · 2338 阅读 · 0 评论 -
Linux C/C++内存越界定位: 利用mprotect使程序在crash在第一现场
原文链接:https://blog.youkuaiyun.com/thisinnocence/article/details/80025064对于大型Linux C/C++程序,内存越界和野指针类问题往往比较难定位。有的由于内存被非法改写造成了业务功能问题,有的则直接导致了程序crash,而且还经常不是第一现场。针对这种问题,可以采取的解决方法有:利用valgrind工具来排查,会影响程序性能; 使用Address Sanitizer工具排查; 如果是固定的内存被破坏,可以利用gdb watch来抓取第一现转载 2020-11-13 17:37:23 · 537 阅读 · 0 评论 -
[bashdb]SHELL脚本的事脚本解决
Bash Debugger这个开源项目很有意思,可以对需要调试的脚本单步跟踪,设置断点,查看变量值,打印调用堆栈等等。它是怎么做到的?有点意想不到。原创 2020-05-27 17:31:32 · 256 阅读 · 0 评论 -
开源项目libevent
前言开源项目libevent已经在业界广泛使用,甚至是一些对开源软件有着苛刻看法的大公司都在自己的项目里引入了libevent。好吧,libevent项目到底是什么鬼?简介原创 2020-05-21 09:34:13 · 778 阅读 · 0 评论 -
linux里多进程能否同时写同一个FIFO
前言linux里多进程能否同时写同一个FIFO?这个问题,在网络上似乎有很多人早就探讨过了。但是似乎一搜索,总是搜索不到正确的说法。还是写点内容记录下,防止遗忘。需求是什么因为FIFO里存放的都是有序字节流数据,多进程写入的数据必须保证原有的字节顺序不变。当然最基本的问题是,是否多个进程可以同时写同一个FIFO,如果多次打开失败,同时写的时,持续奔溃,就没有必要继续讨论了。理论和实践1. 多进程是可以同时打开并同时写同一个FIFO的FIFO的设计保证了这个需求是可实现执行的。2.原创 2020-05-15 18:34:21 · 1563 阅读 · 0 评论 -
对_stdcall 的理解
引用自:https://www.cnblogs.com/songfeixiang/p/3733661.html对_stdcall的理解(上)在C语言中,假设我们有这样的一个函数:intfunction(inta,intb)调用时只要用result=function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知...转载 2020-05-14 17:43:10 · 215 阅读 · 0 评论