Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
79 / 78 / 35
Регистрация: 02.12.2011
Сообщений: 966
Записей в блоге: 3
1

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

26.07.2012, 16:58. Просмотров 1923. Ответов 1
Метки нет (Все метки)

Уважаемые программисты, возникла проблема. Есть клиент, в нем 2 потока. Нужно организовать выход из программы по нажатию комбинации клавиш "Ctrl + D". Вот примерная схема.


C++
1
2
3
4
5
6
7
8
9
10
11
12
void *runStdIn() {
         char message[1024]
         listenSocket(sock, message);
         printf("%s", message);       
}
 
main() {
   pthread_create(&stdInThread, NULL, &runStdIn, NULL);
   while(1) {
        //if ((getche()) == 4) exit(1);
        sendMessage();
   }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.07.2012, 16:58
Ответы с готовыми решениями:

Выход из do .. while по нажатию клавиши
Как с помощью оператора цикла do... while сделать так чтоб программа не выходила с консольного...

Выход по нажатию клавиши
Здравствуйте! Как выйти из цикла по нажатию клавиши в python 3.4.1.? Знаю что подобные темы были,...

Выход из программы по нажатию клавиши
Добрий день товарищи!! Вот к этой задачи нужно дописать строчку, чтобы при нажатие клавиши или...

Выход из консоли по нажатию клавиши
Кто-нибудь знает как можно выходить из консоли при нажатии на определённую клавишу или введя...

1
Jesus loves me
Эксперт С++
5096 / 3110 / 351
Регистрация: 12.12.2009
Сообщений: 7,845
Записей в блоге: 2
26.07.2012, 18:03 2
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.07.2012, 18:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Выход из консоли по нажатию клавиши
Что надо вставить, что бы по нажатию клавиши, скажем, &lt;Enter&gt; произошел выход из консольной...

Выход из цикла по нажатию клавиши
Возможно ли этот кусок кода приспособить к выходу из цикла не по воду -1 в m а по вводу допустим...

Выход из цикла по нажатию клавиши
В очередной раз поднимаю эту тему. Задача такая, ходить по циклу бесконечное количество раз и...

Выход из программы по нажатию клавиши
Окно почему-то не считывает нажатие клавиши, и все продолжает выполнятся. Как можно исправить?...

Выход из программы по нажатию клавиши
Hello World! Вопрос такой: как сделать так, что бы программа повторялась сначала, до тех пор, пока...

Выход из программы по нажатию клавиши
сосбна что делать, если в кодблоке при компиляции программы во время нажатия клавиши, указывающей...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.