栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

覆盖Ctrl-C

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

覆盖Ctrl-C

哇, 方式 太多的代码去筛选。但是,如果使用C标准库,则应获得所需的行为。这是C ++版本:

#include <iostream>#include <csignal>sig_atomic_t sigflag = 0;void sighandler(int s){  // std::cerr << "Caught signal " << s << ".n"; // this is undefined behaviour  sigflag = 1; // something like that}int main(){  std::signal(SIGINT, sighandler);  // ... your program here ...  // example: baby's first loop (Ctrl-D to end)  char c;  while (std::cin >> c)  {    if (sigflag != 0) { std::cerr << "Signal!n"; sigflag = 0; }  }}

这将捕获

Ctrl-C
(引发
SIGINT
),并且信号处理程序不会被替换,因此它将每次触发,并且没有人终止程序。

请注意,信号处理程序由

fork()
ed子级继承。

Posix函数

sigaction()
使您可以注册一次调用的“一次性”处理程序,这些处理程序将由标准处理程序替换。但是,这是更高级且特定于Posix的。

编辑: 正如@Dietrich指出的那样,您永远不应 信号处理程序
做任何实际工作。相反,您应该设置一个标志(我提供了一个示例),并在循环中检查该标志(并在其中打印消息)。我也将修改示例。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399143.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号