备忘
镇关西
linux环境C/C++开发,关注多核优化、网络,特别是TCP/IP协议栈。
展开
-
处理LetsEncrypt证书签发错误acme-v02.api.letsencrypt.org timeout
处理 HTTPSConnectionPool(host=‘acme-v02.api.letsencrypt.org’, port=443): Read timed out原创 2022-08-25 11:03:52 · 5438 阅读 · 1 评论 -
一例TCP优雅关闭失败SO_LINGER选项未起作用
通过setsockopt :SO_LINGER 选项可以指定函数close对面向连接的协议如何操作。内核缺省close操作是立即返回,如果有数据残留在套接口缓冲区中则系统将试着将这些数据发送给对方。但是如果close时,接收缓冲区有未接收数据,则操作系统会直接发送RST报文结束链接,也就是说TCP链接不会优雅关闭。所以,如果希望链接被优雅关闭,应在接受完缓冲区内的所有数据后再调用clo原创 2014-12-31 15:37:24 · 2080 阅读 · 0 评论 -
一例由于栈溢出导致valgrind报告Invalid write的错误
使用Valgrind检查新写好的代码,在调用函数a时,valgrind报告了一系列的Invalid write和Invalid read,警告所在行数就是函数a的定义位置,让人摸不着头脑。而且也不是每次调用a都会告警。不经意间发现在Invalid write之前还有一个SP change的警告,在这个警告的提醒下发现函数a中一个局部变量数组特别大,达到了6MB,加上其它数据超过了栈空间(l原创 2014-12-04 17:47:56 · 4452 阅读 · 0 评论 -
Dwarf Error: wrong version in compilation unit header (is 4, should be 2)
在gcc4.1.2,gdb6.5的环境下竟然出现了这个错误,非常不可思议,因为这两个版本的gcc和gdb是匹配的.尝试按照下面这个方法重新编译也不行。http://blog.csdn.net/fandroid/article/details/32914203后来发现是源代码中使用了一个静态链接库,这个链接库是在高版本gcc上编译的,链接到可执行程序后导致整个程序都不能gdb,重新编原创 2015-03-12 17:51:37 · 5047 阅读 · 0 评论 -
linux自动挂载U盘只读的修复方法
自动挂载的U盘,变成只读了,用root权限修改属性也不可以。推测是U盘的文件系统损坏,操作系统为了防止进一步毁坏文件系统,而将其设置成了只读。解决起来很简单,插到windows系统上,提示U盘损坏,点击修复即可。可能需要时间较长,耐心等待。原创 2015-03-12 17:54:40 · 4071 阅读 · 0 评论 -
Take advantage of TCP/IP options to optimize data transmission
原文地址:http://www.techrepublic.com/article/take-advantage-of-tcp-ip-options-to-optimize-data-transmission/ Streamlining data transmission is a critical challenge for any enterprise. Thankfully, the转载 2015-04-30 19:53:33 · 1781 阅读 · 0 评论 -
C语言函数调用性能测试
原文链接:http://www.cnblogs.com/woshare/p/4720771.html在i5 3.1GHz下:1024字节栈,需要约300纳秒;64字节栈,需要200纳秒。转载 2015-08-13 15:12:51 · 3024 阅读 · 0 评论 -
在Windows7环境下使用GIT BASH免输入密码
背景:根据一路向北的教《Windows下TortoiseGit over Putty or Openssh提交项目到GitLab》,安装了TortoiseGit客户端,并完成在Gitlab上公钥的部署。但是有些操作必须通过GITbash命令行才能完成,但每次fetch/push都要输入git@10.0.0.1的密码,非常繁琐。经过各种尝试,终于使用前期通过PuttyGen创建的私钥登录服务器。 第原创 2015-11-12 17:01:08 · 3726 阅读 · 0 评论 -
LD_PRELOAD和dlopen选项RTLD_DEEPBIND之间的优先级
标题先说结论:RTLD_DEEPBIND的优先级更高,在符号名发生冲突时,LD_PRELOAD的全局符号介入对于使用RTLD_DEEPBIND标志位dlopen开的动态连接库无效。 发现背景: 在使用《在应用程序中替换Linux中Glibc的malloc的四种方法》一文中第3个方法接管程序内存时发现已接管内存总量比top命令看到的虚拟内存值小很多。于是查看/proc/[pid]/smaps查看虚原创 2015-12-22 18:15:54 · 6828 阅读 · 0 评论 -
平定igb之“乱”
平定igb之“乱”作者:dnk_admin转载 2016-01-12 17:41:44 · 2923 阅读 · 0 评论 -
系统可用内存不足解决
现象:系统可用内存不足,16GB内存仅剩3GB可用,此时我们的也应用没有起,top查看cached也较小,只能重启应付。 原因:初步判断是内核占用,通过slabtop定位到dentry_cache,使用下面的方法解决: http://www.cnblogs.com/panfeng412/p/drop-caches-under-linux-system.html原创 2016-03-14 11:51:40 · 1919 阅读 · 0 评论 -
使用C语言,对OpenSSL命令行加密的文件进行解密
需要使用代码对OpenSSL shell命令加密的文件进行解密需要阅读本文。原创 2017-06-09 21:50:41 · 4902 阅读 · 0 评论 -
【StatsD监控】基于Telegraf+InfluxDB+grafana展示(非Docker方案)
StatsD是一个简单易用的监控方案,由于采用了文本+UDP传输数据,所以对C/C++开发者比较友好。本文介绍了部署Telegraf+InfluxDB+Grafana的方法,以便对StatsD进行可视化。原创 2017-11-07 22:08:05 · 3396 阅读 · 0 评论 -
Windows系统 QQ/Print Screen截图黑屏解决方案
百度到的方案不是要改注册表就是关闭显卡加速,不喜欢。 windows7以上版本,可以用系统自带的snipping tool,支持全屏、矩形、活动窗口等截图方式。原创 2017-11-29 12:02:52 · 11309 阅读 · 2 评论 -
Latex图表设置中英文双标题(非ccaption宏包)
Latex图表设置中英文双标题(非ccaption宏包)双语言标题的解决方案,搜到的答案基本是ccaption宏包。实际使用时,会编译报错: ! LaTeX Error: Command \captionwidth already defined.查到ccaption是一个古老的宏包,已经被caption宏包所取代。caption宏包中包含bicaption.sty,可以完美解决...原创 2018-04-27 16:38:27 · 10310 阅读 · 1 评论 -
Thinkpad x1“电源已接通,未充电”解决办法
现象Windows电池管理提示:“电源已接通,未充电” 或 “plugged in but not charging”。修改电源管理计划无效,重启无效。解决办法拔掉电源重启进入BIOS进入 Power menu选择 “Disable built-in battery”等待电脑关机,再等待30秒插上电源,开机实验环境: Thinkpad X1 extrem Windows 1...原创 2019-04-06 18:19:39 · 48096 阅读 · 11 评论 -
gitlab 11.10.4升级至12.3.4碰到的坑
起因:ACME客户端版本过旧导致无法更新Lets Encrypt证书lets encrypt证书的有效期是90天,使用以下两个命令都无法更新证书sudo gitlab-ctl renew-le-certs和sudo gitlab-ctl reconfigure错误提示ACME v1版本已被废弃:Running handlers:There was an error running...原创 2019-10-07 01:35:05 · 3645 阅读 · 0 评论 -
CALL STACK TRACE GENERATION
转载自http://www.acsu.buffalo.edu/~charngda/backtrace.html(链接已失效)转载 2014-11-19 13:30:21 · 4864 阅读 · 0 评论 -
C语言printf详解
C中格式字符串printf()的一般形式为: %[标志][输出最小宽度][.精度][长度]类型, 其中方括号[]中的项为可选项。各项的意义介绍如下: 1.类型:表示输出类型的格式字符 格式字符意义a 浮点数、十六进制数字和p-计数法(C99)A转载 2014-08-26 16:07:20 · 1485 阅读 · 0 评论 -
在Visual Studio 2008中使用openssl库
在这里下载openssl 后,编译出dll,然后拷贝到VC头文件和库文件目录。拷贝openssl-0.9.8\inc32\openssl到D:\Program Files\Microsoft Visual Studio 9.0\VC\include\openssl拷贝libeay转载 2011-07-15 15:13:03 · 1966 阅读 · 0 评论 -
在Linux上安装Intel网卡驱动
一台安装了RedHat Enterprise Linux 5 AS2的服务器,安装全部组件后网卡没有被系统识别。需要手工安装驱动。服务器是联想的万全R520 G7,在这里BS下联想,客服告诉我只有Redhat 5.3的驱动,而且联想官网的驱动下载回来根本就是空的自解压包。原创 2011-09-21 16:12:39 · 4751 阅读 · 0 评论 -
C语言执行Linux的shell命令并获得返回值
popen函数执行命令后,返回一个指向该命令输出的文件句柄,接下来就可以用fgets等文件操作函数去读取输出结果。#include FILE *popen(const char *command, const char *type);int pclose(FI原创 2011-09-23 11:16:06 · 13412 阅读 · 2 评论 -
source insight粘贴时候的光标问题
新装了搜屎insight,粘贴的时候光标老是在原来的位置,即粘贴内容的左边。这让我感到很困惑很费解很不习惯,于是设置了一下,这里分享出来。在如下位置设置:Options->Preferences...->Typing->After pasting,select:at end of pasted text->确定。转自:http://www.2eggs.org/?p=220转载 2011-11-03 14:10:17 · 3726 阅读 · 1 评论 -
undefined reference to error解决方法
作者:陈运文Linux下编译程序时,经常会遇到“undefined reference error” 报错,这里总结一些可能的原因和解决方案,给需要的朋友:说道undefined reference error,先提一下Linux gcc链接规则:链接的时候查找顺序是:-L 指定的路径, 从左到右依次查找由 环境变量LIBRARY_PATH 指定的路径,使用转载 2012-03-20 15:39:56 · 2124 阅读 · 0 评论 -
一例undefined reference 处理方法
自己写的程序,使用到多个.a文件,多个.a文件之间包含调用关系时,处理undefined reference to "some_function" 之类的错误,可以通过调整编译时.a文件在编译语句的前后顺序,来解决这个问题。在默认情况下,对于-l 使用库的要求是越是基础的库越要写在后面,无论是静态还动态。例如编译 Prog程序,同时用到了libdo.a和libprepare.a两个静态链接原创 2012-03-20 15:36:39 · 983 阅读 · 0 评论 -
32/64位平台printf uint64的方法
转载自http://gcoder.blogbus.com/tag/uint64/在32位平台 typedef unsigned long long int uint64_t;在64位平台 typedef unsigned long int uint64_t;不同的typdef,要求在printf中使用不同的length modifier,uint64_t 在32位使用ll,在64位使用转载 2012-12-03 14:27:16 · 5769 阅读 · 0 评论 -
海明码分组原则
编号为2的幂次方的位(1,2,4,8,16,……)。剩下的为(3,5,6,7,9,……)用m位数据来填充。每个校验位都会使一组比特位(包括它自己)的奇偶值为偶数(或奇数)。位置k上的数据对那些校验位有想象,我们将k重写成2的幂次方和。例如,11=1+2+8,29=1+4+16。对于数据中的每一位的幂次方和可写成下表的形式/校验位对应关系 1248原创 2012-03-11 18:42:29 · 5730 阅读 · 2 评论 -
Source Insight中集成Uncrustify格式化代码
http://myswirl.blog.163.com/blog/static/5131864220106295590650/转载 2013-01-28 09:07:38 · 2329 阅读 · 0 评论 -
C语言中嵌入正则表达式
C语言中使用正则表达式一般分为三步:编译正则表达式 regcomp()匹配正则表达式 regexec()释放正则表达式 regfree()主要参照下面两篇文章,注意字符串中的“/”需要转义为“//”。C语言使用正则教程正则表达式30分钟入门教程转载 2013-06-24 13:27:07 · 1283 阅读 · 0 评论 -
禁止链接器在生成目标程序时自动去除静态链接库中未调用函数和变量
为了减少目标文件的尺寸,编译过程中gcc会移除掉static和inline的函数,链接过程中ld负责移除其它在最终代码中调用的函数。实际上可能某函数在最终可执行程序中未被调用,但是某个dlopen的.so正好需要,就需要保留这个函数,使用-Wl,--whole-archive和 -Wl,--no-whole-archive 两个链接选项就能保证未调用函数不被优化掉。参考:http://原创 2013-10-14 16:12:03 · 3096 阅读 · 0 评论 -
libnet的TCP校验和计算存在bug
内容待补充原创 2013-10-15 09:39:46 · 1424 阅读 · 0 评论 -
Linux下进程性能分析工具
Perf:很好的工具,内置在2.6.31以上的内核版本中,非常详尽的介绍,猛击。mutrace:如果分析互斥锁的阻塞/冲突情况,这里有相关的讨论,提到了mutrace工具Oprofile:如果碰到“opreport error: No sample file found: try running opcontrol --dump”错误,尝试$sudo opcontrol --deini原创 2013-03-18 17:51:24 · 2406 阅读 · 0 评论 -
如何获得动态链接库函数被调用时获得自己存储路径
dlopen动态链接库a.so,a.so中有一个函数int b()想获得a.so的存储路径怎么办?原创 2014-04-21 17:42:19 · 1625 阅读 · 0 评论 -
tcpdump发现不同ipid的数据包被拼接成一个大包
问题在捕包机使用tcpdump捕包时发现,原创 2014-04-24 16:30:18 · 3793 阅读 · 0 评论 -
epollwait操作同一个epoll_fd的线程安全问题
epollwait和epollctl都是线程安全的,但是原创 2014-07-18 09:41:18 · 6207 阅读 · 2 评论 -
Linux:如何在connect后获得源端口?
利用0getsockname() and cast the returned sockaddr to sockaddr_in. It then contains the port & IP.getpeername() gets the remote port & IP.To find an unused port, you have to call bind() on different翻译 2014-07-11 19:21:31 · 1893 阅读 · 0 评论 -
使用ext3grep恢复linux系统被误删除的文件
不小心删除掉了一个文件,试了下linux下的数据恢复软件,发觉ext3grep好用些。比giis更容易入手下载 这篇文章的说明比较详细,不再赘述。原创 2011-06-07 16:47:00 · 1251 阅读 · 0 评论