易截截图软件、单文件、免安装、纯绿色、仅160KB

(转)使用C/C++扩展Python

使用C/C++扩展Python
翻译:
gashero
如果你会用C,实现Python嵌入模块很简单。利用扩展模块可做很多Python不方便做的事情,他们可以直接调用C库和系统调用。
为了支持扩展,Python API定义了一系列函数、宏和变量,提供了对Python运行时系统的访问支持。Python的C API由C源码组成,并包含 “Python.h” 头文件。
编写扩展模块与你的系统相关,下面会详解。
目录
1   一个简单的例子
2   关于错误和异常
3   回到例子
4   模块方法表和初始化函数
5   编译和连接
6   在C中调用Python函数
7   解析传给扩展模块函数的参数
8   解析传给扩展模块函数的关键字参数
9   构造任意值
10   引用计数
10.1   Python中的引用计数
10.2   拥有规则
10.3   危险的薄冰
10.4   NULL指针
11   使用C++编写扩展
12   提供给其他模块以C API
1   一个简单的例子
下面的例子创建一个叫做 “spam” 的扩展模块,调用C库函数 system() 。这个函数输入一个NULL结尾的字符串并返回整数,可供Python调用方式如下:
>>> import spam
>>> status=spam.system("ls -l")
一个C扩展模块的文件名可以直接是 模块名.c 或者是 模块名module.c 。第一行应该导入头文件:
#include <Python.h>
这会导入Python API。
Warning
因为Python含有一些预处理定义,所以你必须在所有非标准头文件导入之前导入Python.h 。
Python.h中所有用户可见的符号都有 Py 或 PY 的前缀,除非定义在标准头文件中。为了方便 “Python.h” 也包含了一些常用的标准头文件,包括<stdio.h>,<string.h>,<errno.h>,<stdlib.h>。如果你的系统没有后面的头文件,则会直接定义函数 malloc() 、 free() 和 realloc() 。
下面添加C代码到扩展模块,当调用 “spam.system(string)” 时会做出响应:
static PyObject*
spam_system(PyObject* self, PyObject* args) {
const char* command;
int sts;
if (!PyArg_ParseTuple(args,"s",&command))
return NULL;
sts=system(command


相关文档:

C、C++和C#的不同之处

C是面向过程的程序设计,程序=数据结构+算法 [最原始,但编个程确实不易]
C++是面向对象的程序设计,程序=多个类+消息(类=数据结+算法)[比较容易上手]
C# 是纯面向对象的语言[更加比较容易上手]
VC/VC++/VC# 只是用来开发C/C++/C#应用程序的软件中的一种。
......

C/C++笔试面试题目

1.已知strcpy 函数的原型是:
char *strcpy(char *strDest, const char *strSrc);
其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy
答案:
char *strcpy(char *strDest, const char *strSrc)
{
if ( strDest == NULL || strSrc == NULL)
return NULL ;
if ( strDest ......

生产者 消费者问题实现 (linux下C语言)

操作系统的一个经典问题是"生产者-消费者"问题, 这涉及同步信号量和互斥信号量的应用, 在这里,我用线程的同步和互斥来实现.
/*
* author 张文
* 2008/06/20
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h> ......

C/C++ 内置类型的数值范围

Data   Type   Ranges  
  C/C++   recognizes   the   types   shown   in   the   table   below.  
   
  Type   Name   Bytes   Other   Names   Range   of   Values    
&nb ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号