Posts

Showing posts from 2013

为ssh及sftp设置代理

越来越多公司使用大公司的云服务,许多云服务提供商(比如腾讯)为了自身安全不允许客户直接ssh/sftp云端,而要通过跳板机(代理服务)中转,也就是俗称的ssh over proxy。

gcc趣闻ud2a指令

Image
昨天我们的游服在测试环境下突然崩溃,gdb corefile显示错误signal 4 - Illegal instruction

linux用到的数据结构及算法

卡马克大神辞职

john carmack辞去了ID的职务,专注于他的新公司Oculus及虚拟实景的研究。一个时代过去了,缅怀一下当年Doom及Quack风光的年代~~!

winamp关门大吉

Image
刚刚睡觉还想到winamp,结果打开hackernews发现winamp将在12月20日关门大吉,哎,当年只有有PC有音乐的地方就有winamp。15年了~~!

原来每个手机都有两个操作系统

原来每个手机都有两个操作系统,一个用作与用户交互(Android, IOS等),还有一个是用来处理无线信号的实时系统,后者一般是闭源的专用系统不为广大人民所熟知。
详情请看OSNews:
http://www.osnews.com/story/27416/The_second_operating_system_hiding_in_every_mobile_phone

Linux下程序主动生成core

通过core文件可以方便的获取程序当前的内存映像,这对大型程序的debug至关重要,一般情况下程序收到特定信号会产生core文件,我们可以利用这点让程序在出现某些严重异常时主动生成corefile。

c++ goto语句后初始化变量

c++ goto语句后不允许初始化变量,如果必须则使用大括号将之后的语句括起来:

emacs改变字体大小

C-x C-= 放大字体
C-x C-- 缩小字体
C-x C-0 回复默认

interlockeddecrement及interlockedincrement在linux gcc下实现

interlockeddecrement,interlockedincrement是windows提供的一套函数,保证变量的加减是原子操作,在多线程中可以用作同步信号,那么linux gcc上是否也提供了对应的函数呢?肯定是有的gcc提供了一整套原子操作:

struct-pack内存对齐(gcc兼容vs内存对齐)

我们公司的游服消息是用结构体定义的,游服移到linux上麻烦大了,因为Vc++的结果体内存对齐方式与gcc的不同(具体不同google下,很多文章)而以前有些程序员偷懒没加#pragma pack去调整对齐,怎么办呢?其实vc++的cl编译器和gcc编译器都有全局调整内存对齐方式的开关。gcc在编译时加上-fpack-struct=n的开关就可以指定以n字节来对齐,而cl编译器的参数是-Zn,在visual studios中右键单击项目,选择properties-c/c++-code generation-struct memory alignment中选择对应的对齐方式即可。如果你想让gcc兼容vc++的默认的古怪的对齐方式可以在编译时加上参数-mms-bitfields

malloc出现segment fault

昨天,我的同事在运行移植Linux后的游服时出现了一个问题,在一个函数中用new创建对象时居然出现了segment fault,查看调用堆栈发现异常是出现在malloc函数中。
用gdb检查不出问题,用valgrid也无法定位出错的具体位置。
直接在函数中调用malloc(),发现用malloc()有时候出现段错误,有时候又不会,初步估计是程序在之前的流程中内存越界,破坏了malloc函数使用的记录内存块信息的结构体,造成分配一些大小内存时,内存访问异常。但是具体的问题还在研究当中。。。

gcc预处理##问题

在vc中

#define FOO(A) &##A
#define FOO(A) *##A
#define FOO(A) someclass.##A

都是正确的但是到了gcc会报pasting xxx and xxx does not give a valid preprocessing token

Linux访问windows共享(以及权限问题)

这一段在把公司的服务端移植到Linux下,手头有两台工作机,一台Windows,一台Linux分别在不同网段,路由是单向的Linux可以访问Windows,Windows不能访问Linux为了共享文件我决定在Windows上设置共享,通过共享来分享文件。
Linux访问Windows共享很简单,可以用Mount很方便的将Windows的共享挂在到Linux上,只要输入如下命令

fedora18升级19笔记本无法调节亮度

从fedora18升级到fedora19发现亮度调节没有作用了。而且亮度保持最大,根本没法看。
这时候可以加内核参数暂时解决亮度问题。

没有根的人

没有根的人

2013年7月16日 晚

我是一个没有根的人,
也就是说我没有家乡,
风把我带到哪里,
我就去到哪里。

不要为我担心呵,
那云朵是我的伙伴,
这漂泊的日子里,
我并不孤单。

远方的地平线是水手的天堂,
皎洁的明月是游子的故乡,
但我呵,一个没有根的人,
驾着一叶孤舟游荡。

我未曾不想扎根,
但大地是坚硬的,
我未尝不想驻足,
但命运带我到远方。

飘摇,飘摇,飘摇呵,
我的心却始终向着一个方向!
那宿命也不能将其动摇。

秉烛夜游时,
你是否也看见我?
一个没有根的人!


好久没写诗了,水平越来越差,见谅!

不要忽略编译器的warning哦

今天上班给服务器加功能的时候遇到灵异事件,用Debug版本工作正常,一到Release版本上就不正常了,有时候好,有时候坏。一时让我疑惑不已,大呼见鬼。后来折腾了半天发现是一个函数的问题。这个函数的返回值是bool,但是这个函数我给漏了显式的返回值(return false/true),Debug版编译器帮我们做了一些事情,在这种情况下这个函数总是返回false,刚好我测试的时候正是需要这个函数返回false的情况,程序运行便一切正常。但是到了release版,这个没有显示返回值的函数,它的返回值就变得不确定了,有时候是true有时候是false,于是就发生了我上面说的灵异事件,测试环境下程序时好时坏。其实编译器早都给除了warning只是一般情况下只有error才会引起我的注意,而warning不能阻止程序的正常编译,就被我忽略了,好在只是一个简单的模块,查bug较为容易,要是一个非常复杂的系统那真是叫天天不应,叫地地不灵了!经过这次事情我深深的体会到了编译器的warning是不能忽略的!

ps:很久没写博客,主要因为前一段忙于毕业论文与毕业设计,现在有空了会陆续补回来。

买了个PhatonVPS做SSH代理

昨天买了个PhatonVPS的Xen乞丐版VPS,网传这家的VPS相当垃圾,不过我不拿来做站纯粹拿来做SSH Proxy目前的情况还是挺安逸的。只可惜Xen的流量只有300GB,只能自己一个人拮据的用着,如果借朋友用恐怕不够。如果你是看视频的大户,应该选择OpenVZ版有33TB的带宽,不过听说PhatonVPS的OpenVZ超售严重,及其垃圾,所以我没有下手毕竟30GB对我来说足够了,如果有谁想试试这家的VPS做SSH的感觉如何可以联系我,我可以贡献出来给大家试用一下哈。

大小写不敏感的字符串比较函数

doom3的源码,大小写不敏感的比较两个字符串,如果相等返回0,s1>s2返回1,s1精妙吧,哈哈。。

用二级指针操作链表

前天给公司的游戏服务器加了命令行的命令补齐功能,好好的研究了下命令的解析,正好手上有ID doom3的代码,所以对比下两边的代码。公司的是用数组存结构体来保存命令的信息。Doom3是用链表,链表的检索性能不如数组,但是灵活可以扩展,而且稍微有点经验的c程序员都喜欢用二级指针来操作链表。来让我们看看id的实现。

一次修bug小记

最近到一家游戏公司工作,前几天公司游戏服务端有个bug是这样的:

unsigned short LID = -1; //LID的值在其他地方可能会被改写!
.....
if (LID == -1)
...
else
...

C语言的匿名结构体,匿名联合体

c++很早就支持了,c99标准没有这条,最新的c11标准才有,但是其实现在的编译器都支持哦。

微软在天猫开店

微软在天猫开官方店了
地址:http://microsoftstore.tmall.com/
看来天猫的力量了得!
zdnet的报道:
http://www.zdnet.com/cn/microsoft-opens-china-online-store-on-tmall-7000012865/

_stdcall与_cdel及_fastcall区别(以及什么是平衡堆栈)

最近忙着实习,好久没写博文了,赶紧来补一个。
我们在写c/c++程序时都会用到函数,那么函数在调用时怎么保存参数,怎么执行调用呢。
CISC(如x86)机器上由于寄存器个数有限,参数使用堆栈来保存。而保存参数的顺序,在哪里平衡堆栈(清理参数)的约定称作calling convention(调用方法)。
c/c++上我们可以在函数开头通过_cdel _stdcall _fastcall等标记来指定函数的调用方法。c/c++默认的调用方法_cdel。

随感

每每到了人生的十字路口,就更深的体会到了道经开始的那句话:道可道也非恒道也,名可名也非恒名也。未知的未来,巨大的机会成本,选择带给人焦虑!

gentoo kde鼠标键盘没反应的解决方法

gentoo安装成功kde

/etc/init.d/xdm start

进入kde登陆界面一切正常,唯一的问题就是鼠标键盘不能用了,怎么办呢?

fedora17升级fedora18

跳票已久的fedora18来啦,fedora18重写了安装程序,要从fedora17升级到fedora18方法也大不相同,preupdate不能用了,取而代之的是新的工具fedup,可以从网络和ISO中下载

Linus Torvalds 对redhat开发者发飙

新年伊始,linux的创作者最近对redhat的内核维护者Mauro Carvalho Chehab开骂,原因是他提交的一个patch导致ioctl()系统调用返回错误的值,导致应用程序崩溃。具体的内容请大家围观。

随感

人生的恐惧来源于对未来的未知,但同时它也是你憧憬明天的原因,以及奋斗的动力。

dreamspark的edu邮箱备忘

很早以前在微软的dreamspark申请过一个认证的账户,可以下载微软为学生提供的软件,很不幸忘记了好不容易弄来的edu邮箱,今天想起来了在这里备忘一下,免得又忘记了foxhlchen@live.whut.edu.cn
大家如果想用正版的微软企业级软件可以去弄一个edu邮箱,然后去微软的www.dreamspark.com以学生身份参加dreamspark计划就能下载最新的微软企业级软件,免费体验正版,很实惠哦!