linux
文章平均质量分 60
RyanLeiWang
主业:软件工程师/程序员/没有土地的码农; 业余:贫困linux黑客/android开源系统贡献者; 副业: 不入流经济学家/3流投资家
展开
-
沉思录四:如何优化性能
面对一个架构设计繁复的linux服务器端应用,难于维护的局面,如何破局?其中,性能总是不达标怎么办?原创 2021-03-24 10:03:41 · 210 阅读 · 0 评论 -
沉思录三:敏捷开发的精髓是什么
面对一个架构设计繁复的linux服务器端应用,难于维护的局面,如何破局?我想起当年大家讨论敏捷开发的事情。若干年后,尘埃落定,敏捷开发遗留下的最实用和重要的是:结对review和每次构建。原创 2021-03-16 17:54:18 · 305 阅读 · 0 评论 -
沉思录二:以unix哲学基础的架构设计
面对一个架构设计繁复的linux服务器端应用,难于维护的局面,如何破局?看看《unix编程艺术》一书里,unix哲学基础章节如何说的。1 模块原则:使用简洁的接口拼合简单的部件2 清晰原则: 清晰胜于机巧3 组合原则:设计时考虑拼接组合4 分离原则: 策略同机制分离,接口同引擎分离5 简洁原则:设计要简洁,复杂度能低则低6 吝啬原则: 除非确无它法,不要编写庞大的程序7 透明性原则:设计要可见,以便审查和调试8 健壮原则: 健壮源于透明与简洁9 表示原则: 把知识叠入数据以求逻辑质朴而原创 2021-03-12 20:03:29 · 231 阅读 · 0 评论 -
沉思录一:如何维护一个复杂的网络应用
写下这个文章的时候,刚从一个复杂的linux服务端网络应用项目中脱出,除去身心的疲惫不堪后,不得不反思标题中的问题,如何破局?这样在下次面对相似问题时,可能就多几分幸存的几率。“最想知道我是在什么地方死的,这样我就可以避开死亡了。” 这个是查理芒格多次讲过的话。但是很多人被困难问题击败后,都没有找到自己是在哪儿失败的?如何破局?首先是找到在哪儿挂的和挂的原因。原创 2021-03-12 19:45:43 · 111 阅读 · 1 评论 -
valgrind可以输出部分报告而无需退出配置文件应用程序吗?
我想用valgrind检查一个长时间运行的内存泄漏过程.我怀疑我之后的内存泄漏可能会在执行几个小时之后才会发生.我可以在valgrind下运行应用程序并获得valgrind日志就好了,但这样做意味着我必须退出应用程序并重新启动它以重新启动一个新的valgrind会话,我仍然需要等待几个小时.是否可以保持valgrind和应用程序运行并在执行期间的任何时候仍然获得valgrind的(部分)数据?你可以使用 Valgrind gdbserver and GDB来做到这一点.简而言之,您可以像往常一样使用转载 2020-12-15 17:00:59 · 578 阅读 · 0 评论 -
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 · 885 阅读 · 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 · 9082 阅读 · 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 · 1855 阅读 · 0 评论 -
linux程序依赖的第三方库相互冲突问题
Linux下的软件开发,因为有着众多的开源项目助力,开发难度应该降低很多才是。但是如果用的开源库太多了,偶尔也会遇到2个开源库相互冲突的问题。好比正在干活,有2个好朋友一起过来帮忙,但是活没有干完,这2个好朋友却先起冲突干起来了。人在江湖,朋友多了,似乎朋友之间的矛盾也成了自己的矛盾。-------------------------摘自某某码农开发笔记。特别是在纯C的软件开发中,如果依赖的2个第三方库,有同名的函数,变量或宏定义,那么麻烦就大了去了。有人说,难道编译不过吗?不是,还真不影响编译。但就是原创 2020-11-26 21:11:56 · 2207 阅读 · 0 评论 -
如何防止shell脚本的重入--flock
可重入的函数是安全的。不可重入的函数,每次调用返回的结果,可能是不一致的,即使每次传入的参数是一样的。编程语言里的函数如此,那么linux的shell脚本是不是可重入的呢?答案是:未必。其中,有很大部分的shell脚本是不可重入的。这自然带出问题:如何防止shell脚本的重入?---------------------------------------摘自某某不会装AC的码农笔录这里讨论的脚本重入问题,是说在同一时刻,同时调用2次同一个脚本文件。很多时候,我们希望的结果可能有2种,分别是:1. 多原创 2020-11-21 15:17:10 · 1001 阅读 · 0 评论 -
谈谈随机crash的问题
没有遭遇过软件的随机crash问题的研发人生是不完满的,没有解决过软件随机crash问题的研发人生是有遗憾的!-------------摘自某某装AC人士笔录!在一个大型软件里,或是服务器软件,或是嵌入式系统终端软件里,软件crash问题,比比皆是,是个软件开发者必然遭遇过。但是,软件随机crash问题,相遇很难,解决亦难。这里说的随机crash,是会发生在软件运行过程里的不同地方,具体地说,使用GDB追踪几次crash,你会发现每次crash发生得代码文件和行数都不一样。 这就说明,每次追踪得死亡现原创 2020-11-21 13:47:06 · 444 阅读 · 0 评论 -
shell脚本返回值及其使用场景
本文链接:https://blog.csdn.net/hongweigg/article/details/78978295应用场景在一些应用中(比如Jenkins),嵌入了shell脚本,系统通过shell脚本的返回值来判断执行结果,如果返回值非0,则发生了执行错误,需要中止执行,这在使用单个命令时没有问题。然而,在shell (A)脚本又调用了shell脚本文件(B )时,当被调用的shell脚本B执行过程中发生了错误时,系统不会认为B有问题,而是继续往下执行。这样就会掩盖了问题。解决在被转载 2020-11-18 15:57:37 · 2749 阅读 · 0 评论 -
Linux下杂乱无章的Bash脚本传入参数--如何解析?
无论是外置的getopt命令,亦或是bash内置的getopts函数,都对bash脚本的传入参数做了一些规定,比如强制规定了短参数"-t 1",长参数“--test 1”。但是现实环境的脚本参数是杂乱无章的,不光是长短参数结合的, 还有类似这样的参数"-test 1", 注意了是长参数的基础上少一个减号“-”。如此混乱的传入参数,如何解析,是一个令人头大的难题。...原创 2020-11-17 16:32:00 · 481 阅读 · 0 评论 -
Linux C/C++内存越界定位: 利用mprotect使程序在crash在第一现场
原文链接:https://blog.csdn.net/thisinnocence/article/details/80025064对于大型Linux C/C++程序,内存越界和野指针类问题往往比较难定位。有的由于内存被非法改写造成了业务功能问题,有的则直接导致了程序crash,而且还经常不是第一现场。针对这种问题,可以采取的解决方法有:利用valgrind工具来排查,会影响程序性能; 使用Address Sanitizer工具排查; 如果是固定的内存被破坏,可以利用gdb watch来抓取第一现转载 2020-11-13 17:37:23 · 518 阅读 · 0 评论 -
[bashdb]SHELL脚本的事脚本解决
Bash Debugger这个开源项目很有意思,可以对需要调试的脚本单步跟踪,设置断点,查看变量值,打印调用堆栈等等。它是怎么做到的?有点意想不到。原创 2020-05-27 17:31:32 · 240 阅读 · 0 评论 -
linux的shell脚本的调试方法
前言被问及bash shell的调试方法问题,写了10多年的各种脚本,还真被问到了。以往的打印信息和输出log文件的搞法,对于一些linux后台开发使用到的复杂脚本调试,确实是不够的。有点糗!已存在的方法Shell脚本调试选项Shell本身提供一些调试方法选项:-n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误。 -v,一边执行脚本,一边将执行过的脚本命令打印到标准输出。 -x,提供跟踪执行信息,将执行的每一条命令和结果依次打印出来。使用这些选项有三种方法(注意:避免几种转载 2020-05-25 13:54:52 · 900 阅读 · 0 评论 -
开源项目libevent
前言开源项目libevent已经在业界广泛使用,甚至是一些对开源软件有着苛刻看法的大公司都在自己的项目里引入了libevent。好吧,libevent项目到底是什么鬼?简介原创 2020-05-21 09:34:13 · 765 阅读 · 0 评论 -
linux里多进程能否同时写同一个FIFO
前言linux里多进程能否同时写同一个FIFO?这个问题,在网络上似乎有很多人早就探讨过了。但是似乎一搜索,总是搜索不到正确的说法。还是写点内容记录下,防止遗忘。需求是什么因为FIFO里存放的都是有序字节流数据,多进程写入的数据必须保证原有的字节顺序不变。当然最基本的问题是,是否多个进程可以同时写同一个FIFO,如果多次打开失败,同时写的时,持续奔溃,就没有必要继续讨论了。理论和实践1. 多进程是可以同时打开并同时写同一个FIFO的FIFO的设计保证了这个需求是可实现执行的。2.原创 2020-05-15 18:34:21 · 1495 阅读 · 0 评论 -
基于ROS的Autoware开源项目
还记得百度的阿波罗项目吗?基于ROS系统的自动驾驶系统,Autoware也是基于ROS的。在github上关注Autoware很久了,这个是又日本一个大学主导的开源项目,不停演化,已经发展到了一定的高度。支持的sensor也很多,唯一可惜的是,似乎毫米波雷达的支持,还在开发中。转载 2020-05-15 16:58:06 · 2238 阅读 · 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 · 198 阅读 · 0 评论 -
Detailed Operations For Standalone On Linux BSP of I.MX Processors
由Wigros Sun于 2019-4-24 创建的文档•最后由Wigros Sun于 2019-4-25 修改 版本 2Host Environment: ubuntu 16.04 LTSLinux BSP For i.MX : version 4.9.88...转载 2020-01-21 18:15:53 · 435 阅读 · 0 评论 -
[i.MX6] 下载编译NXP的linux源代码
按照NXP官网获取的文档i.MX_Yocto_Project_User's_Guide.pdf说明,下载imx6相关的linux源代码过程。遇到如下repo init失败问题.$ mkdir imx-yocto-bsp$ cd imx-yocto-bsp$ repo init -u https://source.codeaurora.org/external/imx/imx-manif...原创 2020-01-08 14:00:20 · 2221 阅读 · 1 评论 -
编译警告是否需要关闭
在软件开发中,经常遇到编译工具打印出的各种警告信息。1>f:\mycode\cpptest\main.cpp(55): warning C4100: “argv”: 未引用的形参1>f:\mycode\cpptest\main.cpp(55): warning C4100: “argc”: 未引用的形参1>f:\mycode\cpptest\main.cpp(67): ...原创 2018-09-08 15:42:30 · 2312 阅读 · 0 评论 -
为什么需要复用性更好的函数
如何复用性更好的函数,可能是软件开发者追求的目标之一.为什么要求复用性好?或者复用性好的函数能带来什么好处?我们可能需要看看它的反面:复用性不好带来了什么坏处?1. 无法复用的函数,在扩展新功能时,必须要另外新增一个函数.久而久之, 代码量会变大,维护会需要更多的人力和时间.2. 无法复用的函数,在测试方面可能会变得困难.一个函数的使用,乐观的目标是传入相同的参数,得到一个相同的返回值...原创 2018-03-11 22:46:14 · 905 阅读 · 0 评论 -
GNU Radio教程(一)
GNU Radio是一个设计框架,用户可以用来设计、模拟和部署的真实高效无线电系统。这是一个高度模块化,自带flowgraph流程图,集成处理各种信号的库,可以很方便的将各个模块结合到一起来处理复杂的信号。GNU Radio已经被广泛应用于无线电世界,可以用电脑软件处理包括音频处理、移动通信、卫星跟踪、雷达系统、GSM网络、数字信号广播等等。转载 2016-07-22 09:44:27 · 60807 阅读 · 9 评论 -
shell命令统计文件内容行数和行首地址
统计文本文件内容包含多少行,同时求取出每行行首的偏移地址。一行一行读取文件内容,计算行数和行首的offset当然是一个方法。使用shell命令来计算,则是一个快速有效的验证手段。原创 2016-07-15 14:38:04 · 1848 阅读 · 0 评论 -
【无人驾驶系列】基于ROS的无人驾驶系统
本文是无人驾驶技术系列的第二篇。在上篇解析光学雷达(LiDAR)技术之后,本文着重介绍基于机器人操作系统ROS的无人驾驶系统。文中将介绍ROS以及它在无人驾驶场景中的优缺点,并讨论如何在ROS的基础上提升无人驾驶系统的可靠性、通信性能和安全性。转载 2016-07-22 15:46:27 · 14066 阅读 · 3 评论 -
HP ENVY 14-j104TX 笔记本电脑安装ubuntu 15.10
HP ENVY 14-j104TX 笔记本电脑安装ubuntu 15.10惠普(HP)ENVY 14-j104TX 14英寸游戏笔记本电脑 (i7-6700HQ 8G 1TB GTX 950M 4G独显 全高清屏幕 win10)ENVY 14-j104TX原来是为游戏发烧友配置打造的。笔者却需要把它作为软件开发电脑使用。原因是考察了市面上其他的笔记本电脑,配置和价格都合适的,还要考虑一原创 2015-12-31 23:58:22 · 2694 阅读 · 0 评论