python调用c动态库样例

2021-12-01  本文已影响0人  MrSunday_8955

以下是使用python调用c的动态库,实现类似于使用signal库捕获信号的功能。
步骤如下:
1、编写动态库mysignal.c文件


#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <stdlib.h>

static void sigHandler(int sig, siginfo_t *info, void *secret){
    // 打印发送SIGINT信号的进程号
    printf("send pid: %d\n", info->si_pid);
    exit(-1);
}

void setupSignalHandlers(char* arg1, int argLen) {
    struct sigaction act;
    printf("input arg1: %s, len: %d\n", arg1, argLen);

    sigemptyset(&act.sa_mask);
    act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND | SA_SIGINFO;
    act.sa_sigaction = sigHandler;
    sigaction(SIGINT, &act, NULL);
}

2、编译动态库

$ gcc -o libmysig.so -shared -fPIC mysignal.c

3、python调用

from ctypes import *
# 加载动态库
mySig = cdll.LoadLibrary(r"./libmysig.so")

arg1 = 'xxxxx'
parg1 = (c_char * len(arg1))()
parg1.value = arg1.encode("utf-8")
mySig.setupSignalHandlers(parg1, len(arg1))


上一篇 下一篇

猜你喜欢

热点阅读