2016-01-21 2 views
-1

Я пишу программу на C, которая передает файлы по сети. Я планирую использовать rsync для фактической передачи файлов. Исходный код rsync свободно доступен здесь: https://rsync.samba.org/download.htmlИнтеграция программы с открытым исходным кодом в мою собственную в C

С точки зрения интеграции его в мою программу, я могу думать о двух путях.

  1. Compile Rsync и запустить исполняемый файл в моей программе execv("rsync", some_args);

  2. Rename Rsync-х main() к и вызвать новую функцию из моей программы.

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

Я знаю, что вариант 2 означает, что обычные вещи, которые происходят при установке и срыве выполнения программ, не произойдут и поэтому могут быть ненадежными. Однако, если у меня есть исходный код, кажется глупым игнорировать его в пользу просто запуска исполняемого файла.

+1

Вы считали [librsync] (https://github.com/librsync/librsync)? Однако он реализует фактически алгоритм сжатия * rsync *, а не протокол передачи. – morido

+0

Я действительно не знал, что существует librsync. Спасибо за ссылку, я проверю ее. – Sam

+1

Независимо от того, что вы делаете: ** соблюдайте условия лицензирования! ** Если вы связываетесь, весь ваш код может стать OSS! – Olaf

ответ

3

Оба подхода будут работать, если все сделано правильно. Поэтому выбор зависит от того, что вы хотите сделать.

Но учтите:

Исходный код доступен для многих проектов с открытым исходным кодом с лицензией на право изменять и повторно использовать их. Но это не значит, что вы должны развить источник и повторно использовать его.

Техническое обслуживание является основной проблемой при любом таком дублировании кода. Если вы скопируете исходный код rsync, тогда вы должны его самостоятельно сохранить или rte-patch, всякий раз, когда ошибки будут исправлены в фактическом исходном коде, и то же самое для реализации функций, оптимизации и т. Д.

В целом, Интеграция "может быть непростой задачей. В зависимости от размера кода это может привести к значительной работе.

Так что, если вы действительно не должны иметь свою собственную реализацию rsync, я хотел бы предложить не идти с вариантом 2 и всегда предпочитают стандартные утилиты/библиотеки.

+0

Хм. На самом деле я об этом не думал. Было бы намного легче, если бы мне не пришлось его поддерживать/исправлять. благодаря – Sam

Смежные вопросы