У меня есть консольная программа, и я хочу, чтобы, если пользователь нажал ctrl-z, программа вышла, а если он нажал ctrl-c, ничего не произошло. В Bash я бы поставил ловушку, что я должен использовать в C ++?
В Unix используйте signal() в <signal.h> для регистрации функции, вызываемой при получении сигнала.
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); }
Если вы используете систему на основе UNIX, то вы хотите либо signal(), либо sigaction() в зависимости от ваших предпочтений и модели потоков; лично я бы порекомендовал sigaction() более signal(). Вы хотите поймать в ловушку SIGTSTP и SIGINT. Прочитайте раздел Signal Concepts Одиночной спецификации UNIX для подробного описания того, как их использовать.
sigaction()
SIGTSTP
SIGINT
Если у вас есть свободное время, прочитайте классическое Расширенное программирование У. Ричарда Стивена в среде UNIX . Вы никогда не пожалеете. Если вы собираетесь выполнять больше задач по программированию в системе UNIX, возьмите также копии Руководства для программистов POSIX и Руководства для программистов POSIX.4 . Они служат отличными введениями и ссылками.
Для Ctrl + C вы должны поймать сигнал SIGINT. Смотри здесь.
Конечно, это зависит от платформы. Сам C ++ не знает о вводе с клавиатуры или обработке сигналов.
Как вы упомянули bash, я полагаю, что вы работаете в Linux или в какой-то степени UN * X. В этом случае взгляните на signal.h .