У меня есть консольная программа, и я хочу, если пользователь нажмет ctrl-z, программа выйдет, и если он нажмет ctrl-c, ничего не произойдет. В Bash я бы поставил ловушку, что я должен использовать на C++?«Ловушка» control-d и control-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.
Это определенная платформа, конечно. Сам C++ не знает ввода клавиатуры или обработки сигналов.
Как вы упомянули bash, я думаю, вы находитесь на Linux или какой-то UN * X. В этом случае взгляните на signal.h.
Стандарты C и C++ имеют много общего в отношении обработки сигналов и ввода с клавиатуры. Также нечего сказать о приостановке процесса, хотя и «SIGINT» и «signal()» оба охвачены. –
Я не думаю, что язык C или C++ предполагает, что даже есть клавиатура. Но вы правы, и 'SIGINT', и' signal() 'являются частью стандартного заголовка C signal.h', что означает, что вы можете устанавливать функции обработки сигналов и повышать сигналы. – mkluwe
Если вы используете систему на базе 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. visual studio 2015 Coded UI not found controld
- 3. Ловушка Отправка на Windows
- 4. Возможной архитектуры Ловушка
- 5. Ошибка SP ловушка
- 6. Ловушка SIGTERM от JVM
- 7. Ловушка вызова функции?
- 8. Ловушка внешней переменной
- 9. ловушка первичной ошибки ключа
- 10. Ловушка нормального и ненормального завершения скрипта PHP
- 11. Ловушка и печать доступа к объектам
- 12. Ловушка и обертывание исключений с boost :: optional
- 13. Выброс (и ловушка) исключение в анонимном методе
- 14. Ловушка прерывания 6 и вывод текстового файла
- 15. Ловушка и ручка Powershell Ошибка в функции
- 16. Ловушка сообщений в .NET
- 17. ловушка события объема браузера
- 18. Ловушка с радиокнопкой
- 19. Ловушка спокойная NaN
- 20. Ловушка со стрелками
- 21. Ловушка неинициализированных указателей
- 22. Как работает ловушка Android?
- 23. ловушка snmp, регистрирующая приемник
- 24. Ловушка Сообщение WM_SETFOCUS
- 25. Поведения «ловушка», как ожидалось - после того, как «ловушка» странного терминал ввода и без эха
- 26. Ловушка загрузки в Google Chrome
- 27. Ловушка знаний об основах/IDE
- 28. Ловушка в дизайне базы данных
- 29. Ловушка кнопки отмены апплета Java
- 30. Ловушка Создание HANDLE в WOW64
Имеет ли ваша консольная программа более сложный интерфейс, чем обычный процессор stdin/stdout? Что это? – Juliano
Нет, это очень просто – Hai