我有一個控制檯程序,我想如果用戶按下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. 軌跡/ BPT陷阱通過瀏覽器而不是控制檯
- 3. 控制流在Clojure中的時間 - ScheduledThreadPoolExecutor的陷阱?
- 4. C角箱和陷阱
- 5. 在Nagios中配置SNMP陷阱監控
- 6. Javascript Window.onbeforeunload陷阱控件引發事件
- 7. C++模板陷阱
- 8. 控制D型結果
- 9. 在Chrome中繪製文本陷阱
- 10. 陷阱
- 11. 如何繪製控制的圓形凸起和凹陷邊緣?
- 12. 在VBA控制下運行編輯器時陷阱VBE編譯錯誤
- 13. C++程序員有哪些常見的Java陷阱/陷阱?
- 14. 軟件陷阱vs硬件陷阱
- 15. 從MS Access的空陷阱的陷阱
- 16. C#SNMP陷阱接收
- 17. 中止陷阱6用C
- 18. 中止陷阱:6在C
- 19. 控制在C#
- 20. C# - SIP控制
- 21. C#控制一個控制檯進程
- 22. Rufus-Scheduler,DaemonKit和陷阱
- 23. SNMP陷阱和社區
- 24. @Autowired和線程的陷阱
- 25. if-else優化和陷阱?
- 26. C#繪製構成控制
- 27. 解析陷阱
- 28. FileSystemWatcher的陷阱
- 29. ReSharper的陷阱
- 30. 春季陷阱
您的控制檯程序是否具有比通常的stdin/stdout處理器更復雜的UI?是什麼類型? – Juliano
不,這很簡單 – Hai