我有一个控制台程序,我想如果用户按下ctrl-z该程序退出,并且如果他按下ctrl-c没有任何反应。在Bash中,我把一个陷阱,我应该在C++中使用?“陷阱”控制-d和控制-c
回答
在Unix中使用signal()
的<signal.h>
来注册一个函数来调用接收信号。
例如:
#include <signal.h>
void leave(int sig);
// ...
{
signal(SIGINT,leave);
for(;;) getchar();
}
// Beware: calling library fn from signal handler isn't std-conforming
// and may not work.
void leave(int sig)
{
exit(sig);
}
你应该在这里调用'_Exit(sig)'而不是'exit(sig)'。前者在信号处理程序内是安全的,后者不是。 –
'signal()'在不同的平台上表现不同。 'sigaction()'稍微复杂一些,但是便携。 –
对于按Ctrl + C,你必须赶上SIGINT信号。 Look here.
如果您使用的是基于UNIX的系统,那么您需要signal()
或sigaction()
,具体取决于您的偏好和线程模型;亲自,我会推荐sigaction()
超过signal()
。你想陷阱SIGTSTP
和SIGINT
。阅读the Signal Concepts section of the Single UNIX Specification了解如何使用它们。
如果您有空闲时间,请阅读W. Richard Steven的经典作品Advanced Programming in the UNIX Environment。你永远不会后悔。如果您希望执行更多的UNIX系统编程任务,那么也应该选取POSIX Programmers Guide和POSIX.4 Programmers Guide的副本。他们作为伟大的介绍和参考。
- 1. 复制保护陷阱
- 2. 控制流在Clojure中的时间 - ScheduledThreadPoolExecutor的陷阱?
- 3. 轨迹/ BPT陷阱通过浏览器而不是控制台
- 4. C角箱和陷阱
- 5. 在Nagios中配置SNMP陷阱监控
- 6. Javascript Window.onbeforeunload陷阱控件引发事件
- 7. C++模板陷阱
- 8. 控制D型结果
- 9. 在Chrome中绘制文本陷阱
- 10. 陷阱
- 11. 如何绘制控制的圆形凸起和凹陷边缘?
- 12. 在VBA控制下运行编辑器时陷阱VBE编译错误
- 13. C++程序员有哪些常见的Java陷阱/陷阱?
- 14. 从MS Access的空陷阱的陷阱
- 15. 软件陷阱vs硬件陷阱
- 16. 中止陷阱6用C
- 17. C#控制一个控制台进程
- 18. C# - SIP控制
- 19. 控制在C#
- 20. SNMP陷阱和社区
- 21. Rufus-Scheduler,DaemonKit和陷阱
- 22. @Autowired和线程的陷阱
- 23. D-Bus远程控制车例
- 24. 在控制-D上退出子进程?
- 25. 让詹金斯CI控制主管D
- 26. C#绘制构成控制
- 27. 陷阱和模拟与二进制翻译有什么区别?
- 28. 限制和陷阱的电子邮件服务器
- 29. 启用控制-c和控制-V的副本,并在Emacs
- 30. 页面控制和导航控制器?
您的控制台程序是否具有比通常的stdin/stdout处理器更复杂的UI?是什么类型? – Juliano
不,这很简单 – Hai