最近為了測試網速情況怎麼樣,由於部分業務伺服器需要關閉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...