ใครช่วยบอกที อะไรคือความแตกต่างระหว่างexit(0)
และexit(1)
ในภาษา C?
ใครช่วยบอกที อะไรคือความแตกต่างระหว่างexit(0)
และexit(1)
ในภาษา C?
คำตอบ:
อะไรคือความแตกต่างระหว่างexit(0)
และexit(1)
ในภาษา C?
exit(0)
บ่งชี้ว่าการยุติโปรแกรมสำเร็จและเป็นแบบพกพาได้อย่างสมบูรณ์ในขณะที่
exit(1)
(โดยปกติ) แสดงถึงการสิ้นสุดที่ไม่สำเร็จ อย่างไรก็ตามการใช้งานไม่สามารถพกพาได้
โปรดทราบว่ามาตรฐาน C กำหนดEXIT_SUCCESS
และEXIT_FAILURE
ส่งคืนสถานะการสิ้นสุดจากโปรแกรม C
0
และEXIT_SUCCESS
เป็นค่าที่มาตรฐานระบุเพื่อบ่งชี้การยุติที่ประสบความสำเร็จอย่างไรก็ตามEXIT_FAILURE
เป็นเพียงค่ามาตรฐานสำหรับการส่งคืนการยุติที่ไม่สำเร็จ 1
จะใช้สำหรับการใช้งานแบบเดียวกันในหลาย ๆ การใช้งาน
อ้างอิง:
มาตรฐาน C99: 7.20.4.3 exit
ฟังก์ชัน
Para 5
สุดท้ายการควบคุมจะถูกส่งกลับไปยังสภาพแวดล้อมโฮสต์ หากค่าสถานะเป็นศูนย์หรือ
EXIT_SUCCESS
ระบบจะส่งคืนรูปแบบการนำไปใช้งานของสถานะการยุติที่สำเร็จ หากค่าสถานะเป็นEXIT_FAILURE
รูปแบบการนำไปใช้งานของสถานะที่ไม่สำเร็จจะถูกส่งกลับ มิฉะนั้นสถานะที่ส่งคืนคือการใช้งาน-de fi ned
exit
เป็นอย่างน้อยจากความกังวลของคุณ (นรกมีอาจไม่ได้เป็นห้องสมุด C ที่มีอยู่มี. ไม่มีอะไรเป็นแบบพกพา !!! 111)
exit
ด้วยค่าแปลก ๆ แสดงถึงความสำเร็จ exit(0)
ถือเป็นกรณีพิเศษเพื่อประโยชน์ในการปฏิบัติตาม C ใช่ POSIX เป็นมาตรฐาน แต่ไม่ใช่ทุกระบบที่เป็นไปตามนั้น หากคุณต้องการเขียนโค้ดที่ถือว่า POSIX คุณสามารถทำได้โดยอิสระ แต่จะ จำกัด การพกพาของโค้ดของคุณ
exit
ในภาษา C ใช้จำนวนเต็มแทนสถานะการออก
โดยปกติสถานะการออกเป็น 0 จะถือว่าเป็นความสำเร็จหรือการออกโดยเจตนาที่เกิดจากการดำเนินการสำเร็จของโปรแกรม
สถานะการออกเป็น 1 ถือเป็นความล้มเหลวและโดยทั่วไปหมายความว่าโปรแกรมต้องออกด้วยเหตุผลบางประการและไม่สามารถดำเนินการทุกอย่างให้เสร็จสมบูรณ์ในโฟลว์โปรแกรมปกติได้
นี่คือแหล่งข้อมูล GNU ที่พูดถึงสถานะการออก
ตามที่ @Als ระบุไว้ควรใช้ค่าคงที่สองค่าแทน 0 และ 1
EXIT_SUCCESS
ถูกกำหนดโดยมาตรฐานให้เป็นศูนย์
EXIT_FAILURE
ไม่ได้ถูก จำกัด โดยมาตรฐานให้เป็นหนึ่งเดียว แต่หลาย ๆ ระบบนำมาใช้เป็นระบบเดียว
exit(0)
แสดงว่าโปรแกรมสิ้นสุดโดยไม่มีข้อผิดพลาด exit(1)
แสดงว่ามีข้อผิดพลาด
คุณสามารถใช้ค่าอื่นนอกเหนือจาก1
เพื่อแยกความแตกต่างระหว่างข้อผิดพลาดประเภทต่างๆ
ความแตกต่างคือค่าที่ส่งคืนสู่สภาพแวดล้อมอยู่0
ในกรณีก่อนหน้าและ1
ในกรณีหลัง:
$ ./prog_with_exit_0
$ echo $?
0
$
และ
$ ./prog_with_exit_1
$ echo $?
1
$
นอกจากนี้โปรดทราบว่าค่ามาโคร EXIT_SUCCESS
และEXIT_FAILURE
ใช้เป็นอาร์กิวเมนต์ของexit
ฟังก์ชันได้รับการกำหนดการนำไปใช้งาน แต่โดยปกติจะตั้งค่าเป็นตามลำดับ0
และเป็นตัวเลขที่ไม่ใช่ศูนย์ (POSIX ต้องEXIT_SUCCESS
เป็น 0) โดยปกติexit(0)
หมายถึงความสำเร็จและexit(1)
ความล้มเหลว
การexit
เรียกใช้ฟังก์ชันที่มีอาร์กิวเมนต์ในmain
ฟังก์ชันเทียบเท่ากับคำสั่งที่return
มีอาร์กิวเมนต์เดียวกัน
exit คือการเรียกระบบที่ใช้เพื่อสิ้นสุดกระบวนการทำงานที่เรียกว่า พารามิเตอร์ที่จะออกใช้เพื่อแจ้งกระบวนการพาเรนต์เกี่ยวกับสถานะของกระบวนการย่อย ดังนั้นสามารถใช้ exit (0) (และมักใช้) เพื่อระบุการดำเนินการที่ประสบความสำเร็จและ exit (1) เพื่อตั้งค่าสถานะข้อผิดพลาด ลิงค์อ้างอิง
เมื่อปฏิบัติการสิ้นสุด (ออก) จะส่งคืนค่าให้กับเชลล์ที่รัน exit(0)
มักจะบ่งชี้ว่าทุกexit(1)
อย่างเรียบร้อยดีในขณะที่ระบุว่ามีบางอย่างผิดปกติ
exit () ควรถูกเรียกด้วยค่าจำนวนเต็มและค่าที่ไม่ใช่ศูนย์จะถูกใช้เป็นรหัสข้อผิดพลาด
ดูเพิ่มเติม: การใช้ฟังก์ชัน exit ()
exit(0)
หมายถึงโปรแกรม (กระบวนการ) ยุติตามปกติเรียบร้อย ..
exit(1)
หมายถึงโปรแกรม (กระบวนการ) ยุติโดยปกติไม่สำเร็จ ..
หากคุณต้องการสังเกตสิ่งนี้คุณต้องรู้จักการจัดการสัญญาณและการจัดการกระบวนการใน Unix ...
รู้เกี่ยวกับsigaction
, watipid()
..for () ... เช่น .... API ...........
exit(0)
ประพฤติชอบreturn 0
ในmain()
หน้าที่exit(1)
ประพฤติชอบreturn 1
. มาตรฐานคือmain
ฟังก์ชั่นreturn 0
นั้นหากโปรแกรมจบลงสำเร็จในขณะที่ค่าที่ไม่ใช่ศูนย์หมายความว่าโปรแกรมนั้นถูกยกเลิกด้วยข้อผิดพลาดบางอย่าง
ทางออก (0) เทียบเท่ากับทางออก (EXIT_SUCCESS)
ทางออก (1) เทียบเท่ากับทางออก (EXIT_FAILURE)
ในความล้มเหลวโดยปกติค่าบวกใด ๆ จะถูกส่งกลับเพื่อออกจากกระบวนการซึ่งคุณสามารถค้นหาบนเชลล์ได้โดยใช้ $?
ค่ามากกว่า 128 ที่เกิดจากการยุติโดยสัญญาณ ดังนั้นหากคำสั่งเชลล์ใด ๆ ยุติโดยสัญญาณสถานะการส่งคืนจะต้องเป็น (หมายเลขสัญญาณ 128 +)
ตัวอย่างเช่น:
หากคำสั่งเชลล์ใด ๆ ถูกยุติโดย SIGINT แล้ว $? จะให้ 130 (128 + 2) (ที่นี่ 2 คือหมายเลขสัญญาณสำหรับ SIGINT ตรวจสอบโดยใช้ kill -l)
exit function
. ในภาษาการเขียนโปรแกรม C ฟังก์ชัน exit เรียกใช้ฟังก์ชันทั้งหมดที่ลงทะเบียนด้วย at exit และยุติโปรแกรม
exit(1)
หมายถึงโปรแกรม (กระบวนการ) ยุติลงไม่สำเร็จ
บัฟเฟอร์ไฟล์จะถูกล้างสตรีมถูกปิดและไฟล์ชั่วคราวจะถูกลบ
exit(0)
หมายถึงโปรแกรม (กระบวนการ) สิ้นสุดลงเรียบร้อยแล้ว
EXIT_FAILURE
) เดียวจึงไม่เพียงพอ