以下是使用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))
网友评论