我主要来自 Windows 环境,所以在过渡到在 Linux 中编写一些东西时我有点迷茫。
假设我有一个简单的 C/C++ 应用程序,如下所示:
int main(int argc, char** argv)
{
int h = open("something");
while (true)
{
// do work
usleep(10000);
}
close(h);
}
在 Windows 中,我会使用类似的东西GetAsyncKeyState()
(或某种其他类型的键盘检查功能)来查找转义键,并在按下它时跳出我的循环。这样我close(h)
就会被叫到,我会做所有我需要做的清理工作。
我在 Linux 中终止我的应用程序的方式一直是使用CTRL+ C,从我的阅读来看,这意味着它发送SIGINT
,并且是一种导致应用程序退出的“友好”方式。但是,根据我的经验,这只是导致它在收到该信号时丢弃所有内容并关闭它(这意味着我的循环后清理永远不会运行。)
有些人建议我使用signal()
来监听SIGINT
,但其他人不同意这种方法。(另外,它往往会在 Windows 和 Linux 之间的工作方式之间产生更多差异,我希望尽可能地在两个平台上运行。)
这样的事情是否有“最佳实践”?