Linux / C如何正确结束命令行程序

时间:2013-12-17 00:34:55

标签: c linux command-line posix

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

William Pursell评论说你可以抓住SIGINT。

以下是捕获SIGINT时如何实现清理。

首先,定义清理功能。在功能中,您可以进行所有房屋清洁工作。

void cleanup(int signum) {
    ... //all house cleaning steps like deleting files, closing file descriptors
}

在main()函数中,您可以调用signal()并传递函数清理的名称和要捕获的相关信号。您可以捕获适合您的用户操作的多种类型的信号。

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