C de exit (0) ve exit (1) arasındaki fark nedir?


97

Biri bana söyleyebilir mi? C dili exit(0)ve exit(1)arasındaki fark nedir ?

Yanıtlar:


118

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 ise EXIT_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.


1
Taşınabilir olmayanı açıklar mısınız? Özellikle, sıfır olmayan çıkış kodları farklı arıza modlarını gösterir. Bir uygulamanın daha fazla bilgi sağlamak için bunu kullanması yaygındır. EXIT_FAILUREDolayısıyla tek bir sabit ( ) yetersizdir.
Konrad Rudolph

@KonradRudolph: İlgili alıntıyı ekledim. Umarım yardımcı olur.
Alok Save

1
@Als: POSIX bir standarttır. C standart "uygulaması tanımlı" ama bu aslında uygulamalar zaman, "taşınabilir değil" diyerek eşdeğer değildir dese de yapmak kongre katılıyorum.
Cat Plus Plus

1
@PeterM: Bana bu kuralı kullanmayan bir platform bulun. Bu taşınabilirlik bazı uzman / gömülü / müstakil / ne olursa olsun çevre, olabilecekse exitsenin ilgilendiren en son (cehennem, hatta orada olmayabilir olmak C kütüphanesi mevcut. HİÇBİR SEYYAR IS !!! 111).
Cat Plus Plus

3
@CatPlusPlus: OpenVMS'de, 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.
Keith Thompson

12

exit C dilinde bir çıkış durumunu temsil eden bir tamsayı alır.

Başarılı Çık

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.

Çıkış Hatası

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.


9

exit(0)programın hatasız sonlandırıldığını gösterir. exit(1)bir hata olduğunu gösterir.

1Farklı türdeki hataları ayırt etmek dışında farklı değerler kullanabilirsiniz .


3

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.


2

çı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ı


1

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 ...........


1

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.


1

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)


0

Yürütülebilir dosya bittiğinde (çıktığında), onu çalıştıran kabuğa bir değer döndürür. exit(0)genellikle her exit(1)şeyin yolunda olduğunu gösterirken, bir şeylerin ters gittiğini gösterir.



0

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.