提问人:Wheatley 提问时间:1/29/2023 更新时间:1/29/2023 访问量:57
是否可以在 C 语言中检测用户何时关闭控制台?
Is it possible to detect when an user closes the console in C?
问:
我想知道是否可以检测用户何时关闭控制台,然后执行释放先前 malloc 调用分配的内存的函数。
我知道像 Windows/Linux/MacOS 这样的主操作系统应该在控制台关闭时释放此内存,但我认为最好让程序尽可能少地依赖操作系统。
答:
2赞
Harith
1/29/2023
#1
再:
可以检测用户何时关闭控制台,然后 执行一个函数,释放上一个 malloc 分配的内存 调用?
是的,可以捕捉到信号。
在符合 POSIX 的¹ 系统上,将发送进程。SIGHUP
宏观:int SIGHUP
SIGHUP(“挂断”)信号用于报告 用户的终端断开连接,可能是因为网络或 电话连接中断。有关此内容的更多信息,请参阅 控制模式。
该信号还用于报告控制的终止 在终端上处理与该会话关联的作业;这 终止有效地断开会话中所有进程与 控制终端。
当进程退出时,操作系统将自动内存。但是,可以使用 /² 更改默认处理并释放资源。free()
signal()
sigaction()
sigaction() 系统调用用于更改 接收到特定信号的过程。
注意,其行为因 UNIX 系统而异,并且不可移植。避免使用它。signal()
唯一的可移植用途是将 disposition 更改为 /。signal()
SIG_IGN
SIG_IGN
另请注意,C 标准和 POSIX 标准都没有指定异步信号安全,即在信号处理程序中调用它是不安全的。free()
[1] — 对于 Windows,请参阅:子进程 c++ 的 Windows 控制台信号处理
[2] — 在 POSIX 标准中定义,而不是在 C 标准中定义。sigaction()
评论