Форум программистов, компьютерный форум, киберфорум
Наши страницы

Выход по нажатию клавиши из терминала (Linux(UNIX) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создайте класс с именем Employee, включающий в качестве элементов данных три информационных пункта: имя, фамилию и месячную зарплату http://www.cyberforum.ru/cpp-beginners/thread629111.html
Дело обстоит так: Прочитав и, как я думал, поняв 3ю главу книги "Как программировать на с++" Дейтелов пришло время задачек. Немного собравшись я решил задачи 3.11 и почти правильно сделав 3.12...
C++ Надо ускорить алгоритм вычисления чисел с не повторяющимися цифрами Помогите ускорить алгоритм. Надо определить все числа с не повторяющимися цифрами от 0 до 9876543210. У меня время просчета занимает очень длительное время уже на 8-значном числе. Что-то не могу... http://www.cyberforum.ru/cpp-beginners/thread629106.html
C++ Считывание символа с потока для дальнейших действий
Пользователь должен по запросу ввести символ для определения операции: сложения, вычитания или умножения матрицы на число. Не получается считать этот символ с потока. VC++.6 #include <stdio.h> ...
C++ Компилятор просит указать const в конструкторе
Всем привет. Изучаю С++ по Р.Лафоре. В одном из заданий, к главе 8 понадобилось написать класс, представляющий простую дробь, и написать перегруженные операторы: -, +, * и /. Собственно проблем...
C++ MessageBox API http://www.cyberforum.ru/cpp-beginners/thread629083.html
MessageBox API: не получаеться обработать выбор. Мой код: int SELECT = MessageBox(hwnd, _T("Вы действительно хотите завершить работу программы? ВНИМАНИЕ! В случае завершения работы программы,...
C++ Перегрузка потокового оператора (<<). Выдает адрес вместо значения Сабж. Все компелится нормально. Если делать << void то работает ок см комменты если делать класса std::ostream& то возвращает 16чное значение. Заранее спасибо #ifndef Point_HPP // anti... подробнее

Показать сообщение отдельно
Kastaneda
Jesus loves me
Эксперт С++
4701 / 2905 / 239
Регистрация: 12.12.2009
Сообщений: 7,399
Записей в блоге: 2
Завершенные тесты: 1
26.07.2012, 18:03
getche() и подобные функции здесь не будут работать. У меня первая мысль была сделать через сигналы, но Ctrl + D не посылает сигнала, это просто символ а-ля EOF.
Вот, что нагуглил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <unistd.h> 
#include <stdio.h> 
#include <termios.h> 
#include <signal.h> 
 
void sig_hnd(int sig){ (void)sig; printf("(VINTR)"); }
 
int main(){
  setvbuf(stdout,NULL,_IONBF,0);
 
  struct termios old_termios, new_termios;
  tcgetattr(0,&old_termios);
 
  signal( SIGINT, sig_hnd );
 
  new_termios             = old_termios;
  new_termios.c_cc[VEOF]  = 3; // ^C
  new_termios.c_cc[VINTR] = 4; // ^D
  tcsetattr(0,TCSANOW,&new_termios);
 
  char line[256]; int len;
  do{
    len=read(0,line,256); line[len]='\0';
    if( len <0 ) printf("(len: %i)",len);
    if( len==0 ) printf("(VEOF)");
    if( len >0 ){
      if( line[len-1] == 10 ) printf("(line:'%.*s')\n",len-1,line);
      if( line[len-1] != 10 ) printf("(partial line:'%s')",line);
    }
  }while( line[0] != 'q' );
 
  tcsetattr(0,TCSANOW,&old_termios);
}
вот что говорит автор кода:
The program change the VEOF char (from Ctrl-D) to Ctrl-C and the VINTR char (from Ctrl-C) to Ctrl-D. If You press Ctrl-D then the terminal driver will send a SIGINT to the signal handler of the program.

Note: pressing VINTR will erase the terminal input buffer so You can not read the characters typed in the line before the VINTR key pressed.
конечно это кослыть, обмотаный изолентой и кровавыми бинтами, но если очень надо...
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.