Подпись файла librsync без файловых дескрипторов

Я пытаюсь сделать подпись файла с помощью librsync и использовать его во внутренней логике программы. В librsync.h я вижу следующее объявление:

rs_result rs_sig_file(FILE *old_file, FILE *sig_file, size_t new_block_len,
            size_t strong_len,
        rs_magic_number sig_magic,
        rs_stats_t *stats)

Это означает, что я должен написать подпись на диске. Но rdiff_backup использует librsync за питоном и позволяет держать подпись как объект питона.

_librsync_new_sigmaker(PyObject* self, PyObject* args)
{
  _librsync_SigMakerObject* sm;
  long blocklen;

  if (!PyArg_ParseTuple(args, "l:new_sigmaker", &blocklen))
    return NULL;

  sm = PyObject_New(_librsync_SigMakerObject, &_librsync_SigMakerType);
  if (sm == NULL) return NULL;
  sm->x_attr = NULL;

  sm->sig_job = rs_sig_begin((size_t)blocklen,
                             (size_t)RS_DEFAULT_STRONG_LEN);
  return (PyObject*)sm;
}

Файловый дескриптор исходного файла, из которого мы хотим взять знак, очевидно взят из объекта python. Мне нужно понять, как заставить функцию C работать таким образом, взять только дескриптор входного файла и вернуть некоторую структуру с подписью.

0 ответов

Другие вопросы по тегам