2015-07-21 79 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 ... –