掌握学习linux下的编程


虽说是以开源为基础的,而且在简单的程序上写起来是比较方便,不过有些时候确实让人头痛,让人想念微软的.Net或是MFC。

  首先是标准不统一,最近在写一个基于线程池的服务器程序,用到了semaphore,还是存在mmap中的无名semaphore,调试得很愉快,于是高兴地把程序分发往各服务器,没料到在第一个服务器上装的时候就郁闷掉了,发现进程会永远地阻塞在sem_wait()上。后来一调查才意识到,我开发的环境是FC6(用的2.6内核),人家是支持整套Posix IPC的,结果分发到的服务器以Rhel3甚至Rh7为主,内核很老(老到不是问题,主要是发行版编译时不开posix支持),我用的Posix的ipc函数就不支持。没办法,只好返工重写,这下改用System V的semaphore,这个东西比Posix的功能强,却也复杂了不少。Posix说是明日这标准,不过System V还是比较老,被支持广,这下写完,到是没啥问题了。这还只是在linux平台上呢,还没提什么solaris,bsd之流的,现在明白了为什么APUE一上来就介绍各种linux/unix版的区别了哎。

  然后就是库版本什么的挑剔性啦,我写的这个程序要部署在实验室的20多台服务器上。这个工程很大,因为要首先给每台机器装上要用到的库(比如Xercesc),然后把源码拷过去,然后编译,只能写脚本来做这些工作,不过仍然是很麻烦,因为意外情况还是很多的。不能拷二进制程序吗?没戏。发行版各种各样,glibc版本各种各样,直接拷二进制的话,20台机器里有6、7台能正常就不错了。试想这些服务器要都是Windows 2003呢,直接分发二进制就是理所当然的啦,分发源代码再编译才是多此一举。

  还有文档,一直在linux下写东西,能看的也就是man page加上google一些东西,偶尔在win下写程序时看MSDN时确实觉得是享受啊。。。man page,纯文字的不说,里面有各种各样的地方让你参见某某某,却又没个方便的链接过去的方法,影响编程心情啊。

相关内容