gpt4 book ai didi

c - 系统功能缺陷

转载 作者:行者123 更新时间:2023-11-30 14:28:44 25 4
gpt4 key购买 nike

我们在 Linux 中使用 C。 system() 函数是否有可能以意外的方式运行,特别是当我们处理信号时?

我们发现有时,system() 函数会阻塞执行或抛出 SIGSEGV

例如:

system ( "/bin/mv a b" );

使用 system() 是否存在任何已知缺陷可以解释这一点?

最佳答案

system() 函数完美地完成了它应该做的事情。只要正确调用,该行为就非常可靠。它有两种操作模式:

  1. 检查是否有可用的命令解释器 - 当参数为空指针时。
  2. 运行给定的命令,等待命令完成后再返回。

因此,system() 语句会阻塞,直到运行该命令的 shell 完成为止。在类 Unix 系统上,调用的命令实际上是:

"sh", "-c", "...argument to system...", NULL

这意味着传递的字符串由 shell 解释。这需要多长时间取决于执行的命令。如果需要,您可以考虑使用 shell 符号在后台运行命令:

system("( /bin/mv a b & )");

在极少数情况下,system() 本身会生成 SIGSEGV。您必须向它传递一个无效的指针,一个指向程序中无效位置的指针。

关于c - 系统功能缺陷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5630912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com