【问题标题】:Return value of system() functionsystem() 函数的返回值
【发布时间】:2015-07-21 14:38:04
【问题描述】:
#include<stdio.h>
#include<stdlib.h>
main()
{
printf("Hello World..\n");
system("ls");
}

这里...ON SUCCESSFUL 执行系统函数返回“ls”命令的状态..and ON FAILURE 它返回-1..

所以任何人都可以帮我获得系统函数的这个失败条件,它的返回值为“-1”

【问题讨论】:

  • 您是否在问如何使system 失败以返回-1?你想对结果做什么?

标签: c child-process libc


【解决方案1】:

system 函数在 system 本身失败时返回 -1,而不是在它调用的命令失败时返回。例如,如果 fork 调用失败,system 返回 -1。如果您的系统资源(例如内存)非常短缺,或者您的系统对您可以运行的进程数量施加了限制,则可能会发生这种情况。

如果命令失败(例如调用system("false")),system 返回的值不仅仅是命令的返回值;它是wait 系统调用返回的值; man 2 wait 了解更多信息。 (这假设是一个类 Unix 系统;system() 在其他操作系统上的行为不同。)

当然,如果您想查看调用system 返回的值,您需要将该值存储在一个变量中:

int result = system("ls");

您应该阅读system 函数的文档。

如果您试图使system 失败并返回-1,一种方法是使用它递归地调用您的程序。这会消耗大量内存,并且可能会干扰您的系统。仅当您是唯一使用该系统的人并且您不介意可能干扰其操作时才执行此操作。

(顺便说一句,main 的定义应该是 int main(void),而不仅仅是 main(),尽管这不是直接相关的。在 1999 年之前,省略返回类型将默认为 int;这不再允许,但是很多编译器仍然支持旧形式。空括号不指定参数个数;(void) 明确表示没有参数,是首选形式。)

【讨论】:

  • “等待系统调用”假设你在一个 posixized 系统上(为什么?)
  • @n.m.:好点。 OP 正在使用 gcc 和 ls 命令,这使得它很可能是一个类 Unix 系统,但我已经更新了我的答案以使其更加明确。
  • @n.m.: 这是一个类 Unix 系统。
猜你喜欢
  • 2012-12-22
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 2012-04-23
  • 2017-04-29
  • 1970-01-01
相关资源
最近更新 更多