月度归档:2011年06月

Python与C/C++的动态链接库完美配合

在Python里可以使用ctypes库来调用其它语言编译的动态链接库程序,使用方法很简单,Linux和Windows都测试过可行。

用C语言写一个简单的动态链接库,譬如一个加法函数,

int plus(int a, int b)
{
    return a + b;
}

编译一下!(Linux下还要加 -fPIC 参数来编译成so文件)

gcc foo.c -o foo.dll -shared

在同一目录编写python脚本,代码如下:

>>> import ctypes
>>> foo = ctypes.cdll.foo
>>> print foo.plus(1, 2)
3
>>> print foo.plus(100, -1)
99

继续阅读

简单的网络文件传输示例,多线程传一个目录!(pickle很实用)

写了很多年C/C++代码了,有时候换了一种语言去写程序,还是发觉自己的代码始终没有摆脱C的风格和思想。

正当我考虑是否用Python里struct的pack和unpack函数来实现C里的结构功能的时候,我想起来有个东西叫做pickle,可以把一个对象编译成字符串然后保存到外部文件。既然可以这样做,那么我想可不可以用它来把一些数据都用pickle来打包,然后把生成的字符串通过网络传输到另外一个程序,然后得到这些数据内容呢?经过了一些测试,我发现是可行的。

在Python的官网文档上说,有个叫cPickle的东西,和pickle实现了一样的功能,只不过cPickle是用C语言实现的,工作起来效率高很多。另外还了解到Python的marshal也可以实现一样的功能,只不过它没有文档化,不是一个公共的库,会随着版本变化而改变,所以不推荐使用。

对pickle使用方法的详细文档在http://docs.python.org/library/pickle.html

继续阅读