分类 Coding 中的文章

不要使用 cp 替换正在使用中的Linux 动态库

记得以前如果一个.so 被 load 了,应该和程序本身一样,不能覆盖啊,强行覆盖也不会覆盖原来的 inode,而是创建新的 inode 并替换当前目录里面的 inode, 原来打开的文件还是正确的。 但是最近发现在 Linux i386 上面 load .so 以后覆盖 .so ,没有任何提示,正在运行的程序退出时侯则通常都会 segfault. 和 sparc 很像了。 难道我记错了吗? 用 strace 看……

阅读全文

mod_extract_forwarded for lighttpd

今天花了一点时间,用 lighttpd 的 mod_skeleton.c 划拉了一个 mod_extforward.c 出来,功能类似 Apache 上面的 mod_extract_forwarded.c ,都是用来从 X-Forwarded-For 里面截取出来对方真实 IP 用,特别适合在 squid 后面的机器用,或者有人像我一样,爱好用 mod_proxy 穿来穿去的。不过这个 mod 功能弱很多就是了。 使用方法很简单 , 编译出来这个 module 并复制到 lighttpd 的 lib 目录里面。 在 lighttpd.conf 的 server.modules 里面加上 mod_extforward 配置类似下面这……

阅读全文

用 swig 给脚本语言做 wrapper

工程里面有时候需要将某些 C 或者 C++编写的模块封装成脚本语言的扩展,以便在脚本语言里面调用,这个工作通常很枯燥,会写出来很多重复代码,人一向都是会偷懒的动物,因此就诞生了一些工具来帮助人们做这件事情,其中比较有名的就是 swig, 此外还有 boost::python 等,不过我觉得还是 swig 最好,因为他可以同时支持很多种……

阅读全文

解决 mysql 中文乱码问题

老问题了,有很多解决办法,不过最简单的还是 在 /etc/my.cnf 里面的 client 段加上 init_connect=“set names ‘gbk’” 更具体的可以参考 http://ria.richtechmedia.com/?p=313 这个链接,说得蛮清楚的。……

阅读全文

[历史备份]解决智能狂拼3输入i,u,v崩溃的bug

这个已经做完好久了,现在贴出来作为历史备份吧。 智能狂拼 3 是一个很不错的输入法,虽然是一种整句输入法,单词输入能力一样很棒,响应速度比 MSPY2003 更是好了无数倍。官方出了一个 30M 的版本可以免费使用,实在非常厚道。 但是他有一个很恶心的 bug, 就是在某些程序里面经常崩溃,fterm 之类挂接了默认 SEH 的还好……

阅读全文

ACE 的土鳖 bug 不能设置线程栈大小

发现用 ACE 写的多线程程序随便就占用了上百兆内存,查看 /proc//maps 发现有很多 10M 大的内存段,用 gdb attach 上去,p 一下 $esp 可以确定那些 10M 的内存段就是线程栈。这怎么可以,我用不到这多堆栈的。于是按照 ACE 的文档设定了线程栈大小,结果发现还是没有效果 @_@ 读了一下 ACE 的代码,发现原来是 ACE 的一个 bug, ACE 里面创建线程最后是通过……

阅读全文

TCP_DEFER_ACCEPT for Linux vs accept filter for FreeBSD, tux 还是玩不起来

Linux 提供的一个特殊 setsockopt , 在 accept 的 socket 上面,只有当实际收到了数据,才唤醒正在 accept 的进程,可以减少一些无聊的上下文切换。代码如下 val = 5; setsockopt(srv_socket->fd, SOL_TCP, TCP_DEFER_ACCEPT, &val, sizeof(val)) ; 里面 val 的单位是秒, 注意如果打开这个功能,kernel 在 val 秒之内还没有收到数据,不会继续唤醒进程,而是直接丢弃连接。 FreeBSD 有一个 accept filter 的机制,不过看起来更牛……

阅读全文

MSVCR80.DLL 里面的黑手& fick Microsoft

继续昨天关于 VC8 manifest 的话题 今天试验了一下果然不行。2000 之类不支持 winsxs 的系统都可以跑,xp 和 2k3 下面,都说没有正常设置,如果手动删掉 exe 里面的 manifest 的话,则是出个 assert, 说用不正常的方式 load dll google 了一下,找到了某德国牛人的文章 http://blog.kalmbachnet.de/ Using the VC 2005 shared CRT/MFC (DLL) without a manifest is not supported! If you build your app with VC2005 and you accidently have disabled the embedding of the manifest file (or deleted the separate appname.exe.manifest file),……

阅读全文

从gcc静态链接开始的讨论,学了好几手

昨天夜里某 bbs 上进行了一场关于 gcc 链接库的讨论,结果最后转移到了 Windows 下面 VC8 msvcr80.dll 的话题。。 事情的起因是这样的: 我想对某程序静态链接 libstdc++ ,但是动态链接 libc, 因为这个程序用到了 dlopen , 而 dlopen 是无法静态链接的。于是我问如何在 configure.in 里面找到 libstdc++.a 的具体路径,好加在 LDADD 里面 首先是 westline 师弟给出的解决方案 gcc -print-file-name=libstdc++.a , man 了一下,原来 gcc……

阅读全文