Получение типа / размера `time_t` с использованием ctypes - PullRequest
13 голосов
/ 21 июня 2011

Я обращаюсь к структуре C, которая содержит некоторые time_t поля, используя модуль python ctypes .

Учитывая его не вполне переносимый характер, я не могу определить эти поля статически с типом c_int или c_long.

Как я могу определить их, чтобы сделать мой код переносимым?

Пример определения структуры C:

#import <sys/types.h>
#import <time.h>

typedef struct my_struct {
    time_t timestap;
    uint16_t code;      
};

Соответствующая структура типов Python:

from ctypes import *

c_time = ? # What do I have to put here?

class MyStruct(Structure):
    _fields_ = [
        ('timestamp', c_time),
        ('code', c_int16),
    ]

1 Ответ

2 голосов
/ 21 июня 2011

Лучшая ставка для вас - изучить систему, в которой работает ваш скрипт, и сделать лучшую ставку на использование целочисленного типа.Что-то вроде

if sys.platform == 'win32':
    time_t = ctypes.c_uint64
# ...

Суть в том, что time_t не определено в стандарте.Это зависит от ОС и компилятора.Таким образом, ваше определение time_t в вашем скрипте Python зависит от DLL /, с которой вы взаимодействуете.

...