2015-07-21 99 views
1
#include<stdio.h> 
#include<stdlib.h> 
main() 
{ 
printf("Hello World..\n"); 
system("ls"); 
} 

这里......在成功执行系统函数会返回“LS” command..and的statys失败,它将返回-1 ..系统的返回值()函数

所以谁能帮助我得到返回值为“-1”的系统函数失败条件

+0

你问如何导致'system'失败,因此它返回了'-1'?你想对结果做什么? –

回答

4

system函数返回-1如果system本身失败,则不是如果它调用的命令失败。例如,如果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)明确表示没有参数,并且是首选的形式。)

+1

“等待系统调用”假设您处于posixized系统(为什么?) –

+0

@ n.m .:好点。 OP使用gcc和'ls'命令,这使得它可能是一个类Unix系统,但是我已经更新了我的答案以使其更加明确。 –

+0

我在cygwin上使用gcc ... –