<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[brk@syscall.cn]]></title><description><![CDATA[笔记备忘]]></description><link>https://blog.youkuaiyun.com/u012449147</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u012449147]]></copyright><item><title><![CDATA[旧版glibc兼容旅程]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/51123435</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/51123435</guid><author>u012449147</author><pubDate>Mon, 11 Apr 2016 18:27:58 +0800</pubDate><description><![CDATA[一.背景
在新环境编译程序部署到老环境运行。
为什么不直接在老环境里面编译？因为用到了一点c++11的特性，需要较高版本的gcc进行编译；老环境默认的gcc版本太低，新版gcc的rpm包安装部署不上（glibc版本太低），源码安装高版本gcc又太麻烦。
二. 错误表现
注: server名字做过修改, 暂且叫my_server.
 
运行时报错，找不到GLIBC_2.14的符号:]]></description><category></category></item><item><title><![CDATA[CDN源站数据同步优化总结]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/50285029</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/50285029</guid><author>u012449147</author><pubDate>Sun, 13 Dec 2015 18:09:32 +0800</pubDate><description><![CDATA[rsync数据同步优化]]></description><category></category></item><item><title><![CDATA[udp connect偶发失败的问题定位]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/39965797</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/39965797</guid><author>u012449147</author><pubDate>Fri, 10 Oct 2014 17:26:22 +0800</pubDate><description><![CDATA[问题表现
程序“重启”的时候偶发性失败，表现在udp connect失败，但是如果成功启动，则程序运行完全正常。
 
失败时出现coredump，表现为断言失败:
(gdb) bt
#0  0x00007ff031e28f45 in raise () from/lib64/libc.so.6
#1  0x00007ff031e2a340 in abort () from/lib64/l]]></description><category></category></item><item><title><![CDATA[服务器编程的一点心得]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/39090441</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/39090441</guid><author>u012449147</author><pubDate>Sat, 06 Sep 2014 00:10:48 +0800</pubDate><description><![CDATA[由于水平有限，以下仅仅是个人的一些心得，希望对新人有一点参考作用。另外由于时间关系，写得有点杂，有些点可能并不是跟服务器编程强相关的。
性能相关
1.     应用各种pool。
a)       Mempool
比如为了提高内存分配效率，可以使用Mem pool。当对应的场景简单时，可以自己定制私有的内存池管理。当内存池设计相对复杂的时候，可以考虑直接使用jemalloc、tcmallo]]></description><category></category></item><item><title><![CDATA[tcp端口探测脚本 问题分析]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/39081913</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/39081913</guid><author>u012449147</author><pubDate>Fri, 05 Sep 2014 15:55:35 +0800</pubDate><description><![CDATA[【背景】
最近在优化一个监控模块里面的dns解析功能，原来的做法是用旁路线程调用getaddrinfo去同步解析，解析实时性非常差，所以决定将解析改成异步执行。网上搜索了一些dns异步解析的库/接口, 大致有：getaddrinfo_a 、adns、c-ares、udns等等。这些库虽然功能相对比较全，但是在我的场景各种别扭或者低效，不能很好地满足我的需求：其实需求很简单，我就需要解析ipv4的]]></description><category></category></item><item><title><![CDATA[简单高效dns ipv4解析]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38946571</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38946571</guid><author>u012449147</author><pubDate>Sat, 30 Aug 2014 19:49:15 +0800</pubDate><description><![CDATA[【头文件】
/// dns协议打包解包(ipv4地址)
/// @file
/// @date 2014-08-29 22:13:30
/// @version 1.0.0
/// @author ling-zhou(周龄), master@manpage.cn
/// @copyright Tencent
/// @namespace hydra


#ifndef __DN]]></description><category></category></item><item><title><![CDATA[选择合适的整数运算方法]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38739447</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38739447</guid><author>u012449147</author><pubDate>Thu, 21 Aug 2014 22:40:11 +0800</pubDate><description><![CDATA[【简单移位】
大家都知道对于整数乘以2的幂可以通过位左移完成，整数除以2的幂可以通过位右移完成。
实际上现在的编译很聪明，即使不显式地用移位的方式优化，编译器也会自动帮忙完成优化，不过前提是这个数是2的幂且是常量。
 
 
【整数除&求余】
整数除法和求模往往成对的出现，如：
quotient = dividend  / divisor 
remainder = dividend ]]></description><category></category></item><item><title><![CDATA[写时拷贝惹得祸]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38703701</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38703701</guid><author>u012449147</author><pubDate>Wed, 20 Aug 2014 11:24:09 +0800</pubDate><description><![CDATA[【问题表现】hydra cgi底层库取出来的参数不对



 

【问题定位】

1. 确认是否库的问题

check out hydra-release_src-3.10.0，拷贝问题参数到单元测试用例，编译运行，表现跟上面贴图一致，确认是库本身的问题。遗憾的是，cgi底层库单元测试本身的用例全都通过。

2. 走查源码

仔细确认检查，cgi底层库依赖hydra_u]]></description><category></category></item><item><title><![CDATA[个人开发经验总结]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38703671</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38703671</guid><author>u012449147</author><pubDate>Wed, 20 Aug 2014 11:20:55 +0800</pubDate><description><![CDATA[个人心得，仅供参考




一．提升规范性

1. 保持规范整洁的目录结构，用不同的目录存储不同的模块。比如ugc目录存储ugc模块，activity目录存储活动平台模块。模块内部进一步细分share、接口、cgi、server等子目录。避免将不同模块的东西放到一起而显得凌乱。

2. 与时俱进，文件编码尽量用utf8。

3. 尽量避免使用全局using namespace]]></description><category></category></item><item><title><![CDATA[用strace跟踪系统调用]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38703567</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38703567</guid><author>u012449147</author><pubDate>Wed, 20 Aug 2014 11:15:59 +0800</pubDate><description><![CDATA[之前有新同事在问，strace的时候怎么样过滤掉某些系统调用, 这里简单总结下，希望对新同事有参考作用

 

部分跟踪举例：

1.     只跟踪epoll_wait和gettimeofday，其他系统调用通通过滤掉，可以这样： strace -e trace=epoll_wait,gettimeofday（逗号分隔）

2.     过滤epoll_wait和gettimeo]]></description><category></category></item><item><title><![CDATA[tcp连接失败分析]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38703467</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38703467</guid><author>u012449147</author><pubDate>Wed, 20 Aug 2014 11:12:15 +0800</pubDate><description><![CDATA[前端时间业务团队在使用平台oidb中转服务的时候，偶尔出现connect失败的情况。这里简单总结下connect失败的可能原因，供参考。
 
一。网络不通
由于iptables防火墙隔离等原因，导致两台机器之间无法连接。
 
二。网络波动
偶尔出现的网络故障，导致两台机器之间连接失败。一般可以通过ping找到蛛丝马迹
 
三。client端分配不到“端口”
可能的原因有2个：]]></description><category></category></item><item><title><![CDATA[让c/c++代码更好的缩进]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38703333</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38703333</guid><author>u012449147</author><pubDate>Wed, 20 Aug 2014 11:03:27 +0800</pubDate><description><![CDATA[将以下内容追加到开发机自己用户的 ~/.vimrc文件中，可以让vi更好的对C/C++代码进行缩进。

cinoptions是缩进相关的选项。具体的可以查看vim帮助

IndentNamespace是用以防止namespace内部缩进的函数。如果不希望namespace内部内容缩进的话，就加上这个函数；

否则不要加上这个函数（或者将setlocal indentexpr=Inden]]></description><category></category></item><item><title><![CDATA[快速命令行编辑]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38703307</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38703307</guid><author>u012449147</author><pubDate>Wed, 20 Aug 2014 11:02:00 +0800</pubDate><description><![CDATA[可能很多人还在使用Backspace退格键一个字符一个字符进行删除，如果你还在用方向键一个字符一个字符的移动，那么下面的介绍会对你有所帮助。

 

一．Emacs模式（系统默认）：

 

Ctrl+r       然后输入若干字符，开始向上搜索包含该字符的命令，继续按Ctrl+r，搜索上一条匹配的命令

CtrL+p     查找上一个历史命令

Ctrl+n     ]]></description><category></category></item><item><title><![CDATA[慎用string.resize()]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38703267</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38703267</guid><author>u012449147</author><pubDate>Wed, 20 Aug 2014 10:59:35 +0800</pubDate><description><![CDATA[string作为stl模块库的一部分，应用非常广泛，但是用的不好的话，会导致性能低下。

可能很多人（包括我之前）认为resize操作仅仅只是改变string对象的内部偏移量，

实际的情况是：除了改变内部偏移量之外，resize可能伴随内存重分配,  而且还会作填充操作，见帮助文档：



          不适当使用resize可能会严重影响性能。见如下代码(修改自某底层库）]]></description><category></category></item><item><title><![CDATA[gcc内建原子操作总结]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38703225</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38703225</guid><author>u012449147</author><pubDate>Wed, 20 Aug 2014 10:57:41 +0800</pubDate><description><![CDATA[gcc从4.1.2开始提供__sync_*系列的内建函数，用于提供加减和逻辑运算的原子操作。
type是1,2,4或8字节长度的整形。后面的可扩展参数(...)用来指出哪些变量需要memory
 barrier,因为目前gcc实现的是full
 barrier（类似于linux kernel 中的mb(),表示这个操作之前的所有内存操作不会被重排序到这个操作之后）,所以可以略掉这个参数。在3]]></description><category></category></item><item><title><![CDATA[gcc实用扩展总结]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38703249</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38703249</guid><author>u012449147</author><pubDate>Wed, 20 Aug 2014 10:56:47 +0800</pubDate><description><![CDATA[一．              将语句跟声明放在表达式里面

({  语句、 声明 })  ，可以任意组合声明和语句，但是最后必须是一个语句，表示整个表达式的返回值

比如：

 

            

 

二．              局部标签

    __label__ end;

    for (int i = 0; i 

       ]]></description><category></category></item><item><title><![CDATA[警惕sscanf的使用]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38703205</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38703205</guid><author>u012449147</author><pubDate>Wed, 20 Aug 2014 10:56:32 +0800</pubDate><description><![CDATA[sscanf跟scanf类似，只不过sscanf是扫描字符串，而scanf是扫描标准输入，用得好的话会给解析带来极大的便利性，用的不好的话，可能导致程序陷入死循环，进而导致cpu
 100%。

 

案例



 

可能不会像你预期的一样，得到一个三元组{1, 120, 6}, 而是让你得到无数个三元组：



 

 

 

 

 

原]]></description><category></category></item><item><title><![CDATA[linux下如何printf size_t/uint64_t]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38703095</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38703095</guid><author>u012449147</author><pubDate>Wed, 20 Aug 2014 10:51:46 +0800</pubDate><description><![CDATA[一. linux下蛋疼的size_t/ssize_t

     32位环境下size_t被定义为unsigned int, 64位环境下size_t被定义为unsigned
 long, 对于一个需要同时运行在32位、64位环境的程序来说，在printf或者LOG size_t的时候会比较纠结，一般采用如下第1、2两种方式：

1. 强制类型转换

统一转换成unsigned lo]]></description><category></category></item><item><title><![CDATA[利用ctags提升看、写代码的效率]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38703137</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38703137</guid><author>u012449147</author><pubDate>Wed, 20 Aug 2014 10:51:12 +0800</pubDate><description><![CDATA[用vi有一段时间了。要方便的查看c、c++代码的话，还是要依赖一些工具、插件之类的东西，比如用ctags生成符号链接文件。用ctrl+]可以方便的跳转到符号的定义处。vi初学者可能只是简单的使用ctags，而没有使用ctags的一些有用的选项。不加选项使用ctags的话，只能生成一些最基本的符号链接信息。

一．目前我使用的ctags的完整参数，供参考：

alias ctags="cta]]></description><category></category></item><item><title><![CDATA[gcc初始化顺序问题]]></title><link>https://blog.youkuaiyun.com/u012449147/article/details/38702783</link><guid>https://blog.youkuaiyun.com/u012449147/article/details/38702783</guid><author>u012449147</author><pubDate>Wed, 20 Aug 2014 10:35:17 +0800</pubDate><description><![CDATA[【问题】

    最近在封装一个底层库的时候遇到诡异的问题，用gcc4.1.2编译的程序一切正常，

    用gcc4.8.2编译的程序运行总是coredump。 经过分析后发现是初始化顺序问题，代码如下（经过简化）：

 

    typedef std::map typeid_t;

    typeid_t TYPEID; 

 

    __attrib]]></description><category></category></item></channel></rss>