Biri bana söyleyebilir mi? C dili exit(0)ve exit(1)arasındaki fark nedir ?
Yanıtlar:
C dili exit(0)ve exit(1)arasındaki fark nedir ?
exit(0)başarılı programın sonlandırıldığını ve tamamen taşınabilir
exit(1)olduğunu gösterirken (genellikle) başarısız sonlandırmayı gösterir. Ancak, kullanımı taşınabilir değildir.
C standardının bir C programından sonlandırma durumunu tanımladığını EXIT_SUCCESSve EXIT_FAILUREdöndürdüğünü unutmayın.
0ve EXIT_SUCCESSbaşarılı sonlandırmayı belirtmek için standart tarafından belirtilen değerlerdir, ancak yalnızca EXIT_FAILUREbaşarısız sonlandırmayı döndürmek için standart değerdir. 1birçok uygulamada aynı amaçla kullanılmaktadır.
Referans:
C99 Standart: 7.20.4.3 exitPara 5 işlevi
Son olarak, kontrol ana bilgisayar ortamına döndürülür. Durumun değeri sıfır ise veya
EXIT_SUCCESSbaşarılı sonlandırma durumunun uygulama tanımlı bir biçimi döndürülür. Durum değeri iseEXIT_FAILURE, başarısız sonlandırma durumunun uygulama tanımlı bir biçimi döndürülür. Aksi takdirde döndürülen durum uygulama tanımlıdır.
exitsenin ilgilendiren en son (cehennem, hatta orada olmayabilir olmak C kütüphanesi mevcut. HİÇBİR SEYYAR IS !!! 111).
exitherhangi bir tek değerle arama başarıyı gösterir. exit(0)C uyumu açısından özel bir durum olarak değerlendirilir. Evet, POSIX bir standarttır, ancak tüm sistemler ona uymaz. POSIX'i varsayan bir kod yazmak istiyorsanız, bunu yapmakta özgürsünüz, ancak bu, kodunuzun taşınabilirliğini sınırlar.
exit C dilinde bir çıkış durumunu temsil eden bir tamsayı alır.
Tipik olarak, 0 çıkış durumu bir başarı veya programın başarılı bir şekilde yürütülmesinin neden olduğu kasıtlı bir çıkış olarak kabul edilir.
1 çıkış durumu bir başarısızlık olarak kabul edilir ve en yaygın olarak, programın herhangi bir nedenle çıkması gerektiği ve normal program akışında her şeyi başarıyla tamamlayamadığı anlamına gelir.
İşte Çıkış Durumundan bahseden bir GNU Kaynağı .
@Als'ın belirttiği gibi, 0 ve 1 yerine iki sabit kullanılmalıdır.
EXIT_SUCCESS standart tarafından sıfır olarak tanımlanır.
EXIT_FAILURE standart bir olmak üzere sınırlandırılmamıştır, ancak birçok sistem bunu tek olarak uygulamaktadır.
Fark, ortama döndürülen değerin 0önceki durumda ve 1ikinci durumda olmasıdır:
$ ./prog_with_exit_0
$ echo $?
0
$
ve
$ ./prog_with_exit_1
$ echo $?
1
$
Ayrıca, makro değerinin EXIT_SUCCESSve işlevin EXIT_FAILUREbağımsız değişkeni olarak kullanıldığına dikkat edin, exitancak genellikle sırasıyla 0ve sıfır olmayan bir sayıya ayarlanmıştır . (POSIX, EXIT_SUCCESS0 olmasını gerektirir ). Yani genellikle exit(0)başarı ve başarısızlık anlamına gelir exit(1).
İşlevde exitbağımsız değişken içeren bir işlev çağrısı , aynı bağımsız değişkene sahip mainifadeye eşdeğerdir return.
çıkış, çağrıldığı çalışan bir işlemi bitirmek için kullanılan bir sistem çağrısıdır. Çıkılacak parametre, üst süreci alt sürecin durumu hakkında bilgilendirmek için kullanılır. Dolayısıyla, bir işlemin başarılı bir şekilde yürütüldüğünü belirtmek için exit (0) ve bir hatayı işaretlemek için exit (1) kullanılabilir. referans bağlantısı
exit(0) Programın (İşlem) normal olarak başarıyla sona erdiği anlamına gelir
exit(1) programın (işlemin) normalde başarısız bir şekilde sona erdirilmesi anlamına gelir ..
Bu şeyi gözlemlemek istiyorsanız, Unix'te sinyal işleme ve süreç yönetimini bilmelisiniz ...
hakkında sigaction, .. için watipid()() ... böyle .... API ...........
exit(0)gibi davranmaya return 0içinde main()işlev exit(1)gibi davranır return 1. Standart, bu mainfonksiyon return 0, eğer sıfır olmayan değerde program başarıyla sona erdiyse, programın bir tür hata ile sonlandırıldığı anlamına gelir.
exit (0), çıkışa (EXIT_SUCCESS) eşdeğerdir.
exit (1), çıkışa (EXIT_FAILURE) eşdeğerdir.
Başarısızlık durumunda normalde herhangi bir pozitif değer, işlemden çıkmak için döndürülür, kabukta $? Kullanarak bulabilirsin.
Sinyal ile sonlandırmaya neden olan 128'den fazla değer. Dolayısıyla, sinyalle sonlandırılan herhangi bir kabuk komutu varsa, dönüş durumu (128 + sinyal numarası) olmalıdır.
Örneğin:
Herhangi bir kabuk komutu SIGINT tarafından sonlandırılırsa, $? 130 (128 + 2) verir (Burada 2 SIGINT için sinyal numarasıdır, kill -l kullanarak kontrol edin)
exit () her zaman bir tamsayı değeriyle çağrılmalıdır ve sıfır olmayan değerler hata kodları olarak kullanılır.
Ayrıca bkz: exit () işlevinin kullanımı
exit function. C Programlama Dilinde, çıkış işlevi, çıkışta kayıtlı tüm işlevleri çağırır ve programı sonlandırır.
exit(1)programın (işlemin) başarısız bir şekilde sonlanması anlamına gelir.
Dosya arabellekleri temizlenir, akışlar kapatılır ve geçici dosyalar silinir
exit(0) Programın (İşlem) başarıyla sonlandırılması anlamına gelir.
EXIT_FAILUREDolayısıyla tek bir sabit ( ) yetersizdir.