![]() |
1
10
除非您只为一个操作系统编写代码,否则无法知道您的系统调用是否有效。系统更新或操作系统升级时会发生什么?
|
![]() |
2
3
我更喜欢库,因为存在依赖性问题,也就是说,当您调用它时,可执行文件可能不在那里,但库将在那里(假设外部库引用在您的平台上启动过程时得到处理)。换句话说,在比系统调用更多的环境中,使用库似乎可以保证更稳定、更可预测的结果。 |
![]() |
3
3
有几个因素需要考虑。其中一个关键问题是,外部程序是否会出现在安装了软件的所有系统上的可靠性。如果有可能它会丢失,那么最好在程序内部进行。 权衡一下,您可能会认为加载到您的程序中的额外代码是禁止的——对于应用程序中很少使用的部分,您不需要代码膨胀。
system()函数很方便,但很危险,尤其是因为它通常调用shell。您最好通过fork()和exec()系统调用更直接地在UNIX上调用程序。[请注意,系统调用与调用
一般来说,如果将功能构建到程序中,就更容易控制事情,但这不是一个微不足道的决定。 |
![]() |
4
2
安全是一个问题。一个恶意的卷曲可能会在你的程序中造成破坏。这取决于这是一个个人程序,其中编码速度是您的主要关注点,还是一个商业应用程序,其中安全性是一个因素。 |
![]() |
5
1
系统调用很难安全地进行。 所有有趣的字符都需要正确编码才能传递参数,编码的类型可能因平台或命令的版本而异。因此,进行包含任何用户数据的系统调用需要进行大量的健全性检查,而且很容易出错。 |
![]() |
6
1
是的,如上所述,请记住系统调用(如fcntl()和open())和system()调用之间的区别。:) 在C程序原型的早期阶段,我经常对grep和sed等程序进行外部调用,以便使用popen()操作文件。它不安全,不安全,当然也不便携。但它能让你快速前进。这对我很有价值。它让我专注于程序真正重要的核心部分,通常是我最初使用C的原因。 在高级语言中,你最好有一个很好的理由。:) |
![]() |
7
0
我不想这样做,而是使用命令行参数和stdin在应用程序周围建立一个脚本框架。 |
![]() |
8
0
其他的已经提到了好的点(可靠性、安全性、安全性、可移植性等),但我会抛出另一个。性能。通常,调用一个库函数甚至生成一个新线程要比启动一个新进程快很多倍(然后您仍然需要正确地检查/验证它的执行并分析它的输出!) |
![]() |
John V · 是否存在单元测试无法发现的逻辑/流错误类型? 7 年前 |
![]() |
Beefster · 为什么ANSI颜色转义以“m”而不是“]”结尾? 7 年前 |
![]() |
Guillermo Gutiérrez · STR转换是如何工作的? 7 年前 |
![]() |
RudziankoÅ · 合并排序数组算法 7 年前 |
|
user8852560 · 构造函数中的验证和构造函数冲突 7 年前 |
![]() |
jav974 · 订购产品时寻找最佳价格组合的算法 7 年前 |
![]() |
hippietrail · 确定浮点数中前导零的数量 7 年前 |