据我所知,exit(1)
指示的错误,例如:退出(0)的目的是什么?
if (something went wrong)
exit(EXIT_FAILURE);
但是,什么是使用exit(EXIT_SUCCESS);
的目的是什么?
当处理进程可能吗?例如为fork()
?
感谢
据我所知,exit(1)
指示的错误,例如:退出(0)的目的是什么?
if (something went wrong)
exit(EXIT_FAILURE);
但是,什么是使用exit(EXIT_SUCCESS);
的目的是什么?
当处理进程可能吗?例如为fork()
?
感谢
这给调用程序(通常是指令壳)的方式,以检查是否在程序正常或不终止该系统的一部分。
编辑 - 启动 -
顺便说一句,可以通过使用$?
shell变量来查询一个交互式命令的退出代码。例如,这个失败的ls
命令产生值为2
的退出代码。
$ ls -3 ls: invalid option -- '3' Try `ls --help' for more information. $ echo $? 2
编辑 - 结束 -
试想一个批处理文件(或shell脚本),调用了一系列的方案,并根据每次运行的结果可能会选择一些动作或其他。这个动作可能包含一个简单的消息给用户,或者调用其他一些程序或一组程序。
这是程序返回其运行状态的一种方式。
另外,请注意,零表示没有问题,任何非零值指示的问题。
程序通常会使用不同的非零值传递更多信息(除了非正常终止之外)。因此,非零出口值作为更具体的错误代码,可以识别特定的问题。当然,这取决于代码的含义是可用的(通常是/文档有望在)
例如,ls man page在底部此位的信息:
退出状态为0,如果OK ,如果小问题1,如果严重麻烦2。
对于Unix/Linux手册页,请查看标题为EXIT STATUS的部分以获取此信息。
0确实表示成功,但非零值可能表示问题,也可能不表示问题。根据1999 C 7.20.4.3 5,除0,EXIT_SUCCESS或EXIT_FAILURE之外的任何值的含义都是实现定义的。例如,一个实现可以使用状态的低位来表示成功或失败,高位表示传递附加信息,例如处理了多少小部件。 – 2012-07-30 18:28:09
@EricPostpischil谢谢..这是有用的信息和有益的知识。 – Levon 2012-07-30 20:06:37
它也允许人确定程序是否正常终止。只是说 – 2012-07-30 21:29:25
您只能通过调用return函数从主函数中退出程序。要从其他地方退出程序,可以调用exit(EXIT_SUCCESS)。例如,当用户点击退出按钮时。
好吧,你也可以在'main'中使用'exit()'当然是 – pb2q 2012-07-30 18:01:16
!也许我不清楚 – 2012-07-30 18:03:28
“正常”退出程序有两种方式:从main()
返回,或致电exit()
。正常情况下,exit()
被用来表示失败的信号。但是,如果您不在main()
中,您仍然必须以某种方式退出。 exit(0)
通常用于在不在main()
时终止进程。
main()
实际上并不是操作系统的特殊功能,只是针对运行时环境。实际上被加载的'函数'通常被定义为_start()
(这是由链接器处理的,超出了本答案的范围),用汇编写成,它简单地准备环境并调用main()
。从main()
返回后,它还会调用exit()
,返回值为main()
。
如果你发现你的程序已经完成了所有需要做的事情,并且不在'main()'中,那么你可以调用'exit(0)'。 – 2012-07-30 18:00:08
@DanielFischer:那么你的意思是说,这是让我的代码返回到它的调用函数,而不使用'return'的方法吗? – ron 2012-07-30 18:07:08
这是一种几乎立即结束程序执行的方式(某些正常关机例程可能会在预定时间运行)与指定的退出代码。如果通过“调用函数”来表示shell或类似的话,那么是的;如果你的意思是在同一个程序中有一些功能,那么不需要。 – 2012-07-30 18:15:30