2013-12-17 37 views
2

我有一个在Linux命令行上运行的程序。它分配一些内存,打开一些文件描述符,等等。我想要一个很好的方式来让用户输入停止程序,同时仍然进行清理并且不中断某些文件的读/写。什么是正确的方法来做到这一点?到目前为止,我一直在使用CTRL + C来停止该程序,但是我觉得这样做并没有正确地进行清理,并且这并不能让我的程序有机会做一个写入日志文件来指示它正在关闭。 目前,我这样做: - 设置标准输入非阻塞(使程序不会挂起等待输入)Linux/C如何正确结束命令行程序

while(loop_variable != 'q') { 
loop_variable = getchar(); 
... 
} 

有什么建议?

+3

Catch SIGINT,当用户输入时发送^ C –

+3

它“感觉”你的程序没有做什么清理?在终止一个进程后,内核会清理所有的东西给你。 –

+2

或者只是让用户输入^ D,以便getchar返回EOF。 –

回答

3

William Pursell评论说,你可以捕捉SIGINT。

下面介绍如何在SIGINT被捕获时实现清理。

首先,定义清理函数。在这个功能中,你可以做所有的房子清洁。在main()函数中,您可以调用signal()并传递函数清理的名称和关联的信号来捕获。您可以捕捉适合您用户操作的多种类型的信号。

signal(SIGINT, cleanup); 
signal(SIGQUIT, cleanup); 
+0

这看起来正是我想要做的,谢谢!它看起来像我将不得不做任何文件描述符等全球为了访问他们从清理功能,对吧? – IanM

相关问题