将开源程序集成到我自己的 C 中
Integrating an open source program into my own in C
我正在编写一个通过网络传输文件的 C 程序。我打算使用 rsync 进行实际的文件传输。 rsync 源代码可在此处免费获得:https://rsync.samba.org/download.html
在将其集成到我的程序中,我可以想到两种方法。
编译rsync和运行我程序中的可执行文件execv("rsync", some_args);
将 rsync 的 main()
重命名为并从我的程序中调用新函数。
每种方法的优缺点是什么,还有没有其他我没有想到的方法?
我知道选项 2 意味着在程序执行的设置和拆除时发生的常见事情不会发生,因此可能不可靠。但是,如果我有源代码,忽略它而只支持 运行 可执行文件似乎很愚蠢。
如果操作正确,这两种方法都有效。所以选择取决于你想做什么。
但请考虑:
许多开源项目都可以使用源代码,并获得修改和重用它们的许可。但这并不意味着您应该分叉源代码并重新使用它。
维护 是任何此类代码重复的主要问题。如果您复制 rsync
源代码并集成,那么您必须自己维护它,或者 rte-patch 每当实际源代码中的任何错误得到修复时以及功能实现、优化等相同时
总的来说,"Integration"可能不是一个简单的任务。根据代码大小,这可能是一项相当大的工作。
所以,除非你真的真的需要自己实现 rsync
,否则我建议 不要 选择选项 2 并且总是更喜欢标准 utilities/libraries.
我正在编写一个通过网络传输文件的 C 程序。我打算使用 rsync 进行实际的文件传输。 rsync 源代码可在此处免费获得:https://rsync.samba.org/download.html
在将其集成到我的程序中,我可以想到两种方法。
编译rsync和运行我程序中的可执行文件
execv("rsync", some_args);
将 rsync 的
main()
重命名为并从我的程序中调用新函数。
每种方法的优缺点是什么,还有没有其他我没有想到的方法?
我知道选项 2 意味着在程序执行的设置和拆除时发生的常见事情不会发生,因此可能不可靠。但是,如果我有源代码,忽略它而只支持 运行 可执行文件似乎很愚蠢。
如果操作正确,这两种方法都有效。所以选择取决于你想做什么。
但请考虑:
许多开源项目都可以使用源代码,并获得修改和重用它们的许可。但这并不意味着您应该分叉源代码并重新使用它。
维护 是任何此类代码重复的主要问题。如果您复制 rsync
源代码并集成,那么您必须自己维护它,或者 rte-patch 每当实际源代码中的任何错误得到修复时以及功能实现、优化等相同时
总的来说,"Integration"可能不是一个简单的任务。根据代码大小,这可能是一项相当大的工作。
所以,除非你真的真的需要自己实现 rsync
,否则我建议 不要 选择选项 2 并且总是更喜欢标准 utilities/libraries.