Подтвердить что ты не робот

Получение типа/размера `time_t` с использованием ctypes

Я обращаюсь к 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),
    ]
4b9b3361

Ответ 1

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

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

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