2011-12-23 28 views
5

Linux altında bu küçücük programı test ediyorum:

// foo.c 
#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char* argv[]) 
{ 
    int n = system(argv[1]); 
    printf("%d\n", n); 
    return n; 
} 
olursa olsun komut hattına beslenen, ne bir echo $? daima örneğin 0 yazdırır

:

$ ./foo anything 
sh: anything: not found 
32512 
$ echo $? 
0 

Sorum şu: Neden $?, n ile aynı değeri almıyor mu? Ben de Win32 altında programı test ettik ve echo %errorlevel%, n ile aynı değeri verir. Teşekkürler!

+0

bkz çıkış durumu olarak kabul edilmektedir Ve 'sistemi()' söz konusu olduğunda yalnızca davranışı yeniden olabilir? (Negatif bir değer döndürülüyor, değil mi? Bu Linux'ta tanımlı mı?) –

+0

Bu davranışı sadece sistem() ile gördüm. Eğer./Herhangi bir şeyi "echo $" ile yürütürsem, çıktı 127 olur. – wdscxsj

cevap

6

Eğer sekizlik veya hex n yazdırmak, size return WEXITSTATUS(n);, programınız size bekliyoruz durumu ile çıkılacak olursa bunun düşük bayt daima 0.

olduğunu keşfedeceksiniz.

man system ve man wait'u dikkatlice okuyun ve anlayacaksınız. çıkış durumu makro WEXITSTATUS hesaplanır çünkü dönüş değerinin

+0

Ayrıca n'yi exit(); yani. 'exit (n);' –

+0

Teşekkür ederim! Şimdi anlıyorum. – wdscxsj

+1

@MarkTurner Hayır, yapamazsınız. 'return n; 'main()' 'main (ana) geri döndükten hemen sonra (neredeyse) exit (n) ile sonuçlanır. Ve * bu hala '$' '' 0 'ile sonuçlanacaktır. –

2

Sadece alt 8 bit, SUSv4

+0

Sanırım 8 ~ 15 bitleri mi demek istiyorsun? – wdscxsj

+0

Bunu ne düşünüyorsun? – wRAR

+0

Üzgünüm, yanılmışım. Teşekkürler. – wdscxsj

İlgili konular