美文网首页
python调用c动态库样例

python调用c动态库样例

作者: MrSunday_8955 | 来源:发表于2021-12-01 18:54 被阅读0次

    以下是使用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))
    
    
    

    相关文章

      网友评论

          本文标题:python调用c动态库样例

          本文链接:https://www.haomeiwen.com/subject/luasxrtx.html