用于程序的CLI与纯C / C ++库?

时间:2016-10-01 19:03:58

标签: c linux go

背景/上下文:我正在使用Golang开发Linux NAS服务器(如FreeNAS或Rockstor),其特殊功能将是JSON-REST API,以便您可以与LVM2进行交互,共享,包等等。

问题:关于安全性,性能和开发时间,对于程序的某些功能,产生进程或使用本机库的优点/缺点/最佳实践是什么?

示例:对于我的特定用例,NAS管理系统将使用LVM2来管理卷。但是,您可以使用CLI来操作卷,也可以尝试使用LVM2本机C API并将其与Golang cgo包合并。

编辑:改述我的问题/信息。

1 个答案:

答案 0 :(得分:2)

在不同的变体nogo中使用exec可能会产生两件事:安全性和速度。

  • 安全性:如果你与system()或朋友一起出局,你必须绝对确定你不会在命令中包含任何字符串,这些字符串可能会对你的命令行做出有趣的事情。它与SQL代码注入的基本问题相同,只是在更低,甚至更灾难的层(obligatory XKCD,只需替换"'); DROP TABLE学生; - "有效的sh代码沿着'";回声" pwnd',好吧,你明白了。)

  • 速度:当您对现有程序进行外壳创建时,您将创建一个新进程,这可能是您无法容忍的性能损失。如果您执行的任务花费的时间超过几毫秒(在Linux上创建的进程在毫秒范围内),那么完全没问题,但是如果您每秒需要超过一千个调用,那么您肯定需要避免这种开销。

如果这两点得到处理或被证明是非问题,那么完全可以支持其他流程。