Automake生成Makefile过程简介

2010年2月26日 1 条评论 11,013 人阅读过  

有校友在byr上看了我发的openfetion,发信息问我关于automake的东西,其实我了解的也并不多,只是自己查了些资料,然后借鉴了一下别人的项目中相关文件的写法,于是就想照着openfetion中的相关文件把自己对它的理解简单写一下,算是整理一下学过的知识,以后也好有个参考。
Automake支持三种目录层次:flat,shadow,deep
1.flat 所有的源文件及相关文件都放在顶层目录中。
2.shadow 主要的源文件存放在顶层目录中,其它的存放在各个子目录中。
3.deep 所有的源文件都分别存放在各个子目录中。

我的程序用了deep模式,所有的源文件都放在了src目录中。下面写一下automake生成Makefile的步骤:

...
分类: Linux 标签: , , ,

linux下获取当前程序的绝对路径

2010年2月25日 没有评论 15,525 人阅读过  

在linux下运行的程序经常需要获取自己的绝对路径,程序可能需要引用外部的资源文件,比如在../skin/目录下的图片,这样普通程序是没有问题,但当程序在安装到/usr/bin/目录中,或者为程序建立连接以后就会出现问题,我们可以直接通过运行程序的链接来运行程序,这样../skin/目录就找不到了,因为当前目录并不是程序所在的目录,而且链接所在的目录,所以在它的上一级目录中根本找不到skin目录,所以就需要获取程序的绝对路径,用到了一个函数readlink,原型如下:

1
2
3
#include <unistd.h>
 
ssize_t readlink(const char *restrict path , char *restrict buf , size_t bufsize);

该函数的作用是读取符号链接的原路径,将它存到buf中,返回添充到buf中的字节数。

...
分类: C/C++ 标签: ,

飞信文件传输协议简述

2010年2月3日 没有评论 9,696 人阅读过  

今天切回win分析了一下飞信的一些零散的功能的协议,觉得好不容易切过来就抢包看了看文件传输的协议。状态机我就不细划了,简单的地写一下几个重要的点:
当发起文件传输请求的时候,客户端向服务器发起ShareContent的请求:
fetion.com.cn SIP-C/2.0
F: 916098834
I: 3
Q: 0 O
K: ShareContent
T: sip:572003969@fetion.com.cn;p=4599
L: 460

...
分类: Protocol 标签: ,

Slackware安装配置

2010年1月30日 2 条评论 10,411 人阅读过  

1.Slackware安装
前两天实验室新买了一台服务器,装系统的活就交给了我,一直钟爱于Slackware,于是就想着把服务器上也装一个Slackware,因为是台裸机,没办法就去买了张CD,刻了张Slackware13.0CD1,服务器也不需要图形界面之类的东西,一张CD就完全足够了,然后借了个CD就开始安装了。

第一次用CD安装,过程很顺利,其实也没有什么特别需要说的,就是按照提示一步一步来的,第一步是分区,服务器是1T 的硬盘,这么大的硬盘我还真不知道该怎么分区,留了200G以后以防以后需要装Windows,可能性极小,但还是留了。
我的分区方案是:
swap分区 4G
ext3 40G 挂载在/ 用于存放操作系统
ext3 10G 挂载在/tmp 临时目录,10G着实有点大,不过硬盘空间也实在是用不完
ext3 700G 挂载在/home 把剩下的磁盘空间全给了/home,这样每个人开一个账户,在上面怎么折腾都行
ntfs 200G 挂载在/winback 为将来的windows预留的,十有八九是用不到的

接下来的硬盘安装就很简单了,只不过没有Ubuntu等发行版那么好看的界面,安装起来也一样很方便,引导程序安装了Slackware默认的LILO

...
分类: Linux 标签: ,

关于C/C++的内存管理和函数回调

2010年1月29日 5 条评论 8,652 人阅读过  

最近一直都在用C++写程序,这几年都在用像C#,java这样的高级语言,很多C/C++的机制用起来突然发现自己已经那么不熟练了,甚至有些东西在当初就没有理解透彻,简单地说一下自己遇到的一些小儿科的问题。

1.C的内存管理

首先便是C/C++的内存管理机制,C#和java这样的高级语言是很牛的,他们有自己的自动内存管理机制,不需要程序员去人为地释放分配的内存,而之于C++便不同了,每一次在内存中new一块内存空间,在使用完后都要及时地释放,一个new便一定要对应一个delete,new完没有delete,这可能不会马上出现太大的问题,不过程序却会蚕食着内存,直到耗尽。

另外就是变量在内存中的存储位置问题,其实以前在用高级语言的时候都从来不考虑这个问题的,而现在不同了,想做一个c/c++ coder ,就需要把这些细节都弄清楚,通过new动态分配的内存空间是存在于堆上的,而且函数内部定义的变量的内存空间是存在于堆栈上的,当初对这个问题产生了一个弱弱的疑问,像下面这段代码:

void test()
{
       char* name = new char[10];
}
...
分类: C/C++ 标签: ,

终于给自己划了一块地

2010年1月28日 11 条评论 8,726 人阅读过  

下午在网上买的虚拟主机,卖家口碑很好,事实也证明了选他的主机绝对是对的,价格公道不说服务还真是到位,域名我也找 […]

...
分类: My Life 标签: