python和C語言混合程式設計例項

2022-09-28 08:24:07 字數 2245 閱讀 9224

最近為了測試網速情況怎麼樣,由於部分業務伺服器需要關閉icmp,這樣的話採用普通的ping就無法適應我的需求,於是自己簡單的寫了乙個基於tcp埠的ping的程式,由於c執行效率比較的不錯,但是開發效率低下,而python是開發效率高,但是執行效率不如c,由於需要大規模的使用,於是用c實現核心部分的**,並把這部分實現成乙個python的模組,由python呼叫c的模組,下面就貼**吧

複製** **如下:

/* tcpportping.c */

#include

#include

#include

#include

#include

#include

#include

/* count time functions */

static double mytime(void)

static pyobject *                                 /* returns object */

tcpping(pyobject *self, pyobject *args )

bzero((char *)&addr, sizeof(addr));

if ((hp = gethostbyname(host)) == null)

bcopy(hp->h_addr, &addr.sin_addr, hp->h_length);

addr.sin_family = af_inet;

addr.sin_port = htons(port);

struct timeval tv;

tv.tv_sec = 0;

tv.tv_usec = timeout * 1000;

double stime = mytime();

if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) < 0)

fd_set read, write;

fd_zero(&read);

fd_zero(&write);

fd_set(fd, &read);

fd_set(fd, &write);

if (select(fd + 1, &read, &write, null, &tv) == 0)

double etime = mytime();

time = etime - stime;

if (!fd_isset(fd, &read) && !fd_isset(fd, &write))

close(fd);

return py_buildvalue("d", time/1000);        /* convert c -> python */

}/* registration table  */

static struct pymethoddef portping_methods = ,       /* method name, c func ptr, always-tuple */

/* end of table marker */

};/* module initializer */

void inittcpportping( )                       /* called on first import */

編譯成python模組

複製** **如下:

gcc tcpportping.c  -i/usr/include/python2.4 -shared -l/usr/bin -fpic -lpython2.4 -o tcpportping.so

下面是python呼叫c模組的**:

複製** **如下:

執行python**就可以實現埠ping的結果,從測試的情況來看,該程式執行的結果跟普通的ping幾乎沒有什麼差別。

本文標題: python和c語言混合程式設計例項

本文位址: /jiaoben/python/109043.html

c 和Python混合程式設計

1.設定環境 1 在vs的附加包含目錄中新增python的include路徑 2 在vs linker的附加庫目錄中新增python的libs路徑 3 注意,如果安裝的python是64位的,那麼vs工程也要是一直對應的x64活動平台,否則會報 無法解析的外部符號 imp py initialize...

C 和C 混合程式設計

由於歷史原因,很多時候我們的 並不完全是使用.net寫成的。這時候和以往c 的混合程式設計就顯得相當重要了。最近碰到了這樣的問題,將方法簡要記述如下。要在c 中呼叫c 函式,大體的思路是這樣的 首先將c 函式寫成dll形式的庫,然後在c 中匯入dll中的函式進行呼叫。具體的 類似這樣 c 1int ...

C 和C 混合程式設計

由於歷史原因,很多時候我們的 並不完全是使用.net寫成的。這時候和以往c 的混合程式設計就顯得相當重要了。最近碰到了這樣的問題,將方法簡要記述如下。要在c 中呼叫c 函式,大體的思路是這樣的 首先將c 函式寫成dll形式的庫,然後在c 中匯入dll中的函式進行呼叫。具體的 類似這樣 c 1 int...