LINUX.ORG.RU

Пехерват сигналов

 ,


0

2

Добрый день, все еще пишу на си реализацию терминала. И столкнулся с проблемой реализации вырезать/копировать/вставить. дело в том что на ^Y(вставить) программа завершает работу, а функцией signal у меня не получается перехватить. Подскажите пожалуйста как это можно сделать + как ловить другие сигналы ^+U ^+W esc+W?


вот список разрешенных функций

◦ malloc, free ◦ access ◦ open, close, read, write ◦ opendir, readdir, closedir ◦ getcwd, chdir ◦ stat, lstat, fstat ◦ fork, execve ◦ wait, waitpid, wait3, wait4 ◦ signal, kill ◦ exit ◦ pipe ◦ dup, dup2 ◦ isatty, ttyname, ttyslot ◦ ioctl ◦ getenv ◦ tcsetattr, tcgetattr ◦ tgetent ◦ tgetflag ◦ tgetnum ◦ tgetstr ◦ tgoto ◦ tputs

diosio
() автор топика
Ответ на: вот список разрешенных функций от diosio

tcsetattr

Ну так самое главное. cfmakeraw только проставляет нужные флаги в структуре, это можно и напрямую сделать, а потом с этими флагами через tcsetattr режим raw и устанавливается. Найти исходник cfmakeraw и посмотреть, какие флаги нужны, и copy-paste в свой код.

anonymous
()
Ответ на: комментарий от anonymous

Собственно, man termios, изучить флаги, выбрать нужные, проставить, вызвать tcsetattr(1,TCSADRAIN,&tio); например.

anonymous
()
Ответ на: сюда еще флаги нужны? от diosio

Из man cfmakeraw:

           termios_p->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
                                 | INLCR | IGNCR | ICRNL | IXON);
           termios_p->c_oflag &= ~OPOST;
           termios_p->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
           termios_p->c_cflag &= ~(CSIZE | PARENB);
           termios_p->c_cflag |= CS8;
xaizek ★★★★★
()
Ответ на: комментарий от anonymous

Да, и не лишним будет напомнить, что сначала надо получить структуру через tcgetattr, а ещё лучше сохранить копию и tcsetattr ее перед выходом.

anonymous
()

мне нельзя этой функцией пользоваться по заданию

Терпеть не могу такие задания. Из серии «трахнитесь с женщиной, но не на кровати, а в гамаке, и не лежа, а стоя на одной ноге».

Обычно такие задания препод высасывает из пальца, когда ищет, чем бы занять академические часы скубентов. И чем забористее велосипед, тем илитарнее он выглядит в глазах наивных скубентов. Опять таки, если содержание курса и/или качество преподавания ни в какие ворота, всегда можно объявить результаты решения дурацкой задачи, и им как бы неявно намекать недовольным скубентам: мол, вот же, один чел из группы решил, а вы не решили, так что чего вы тут на меня бочку катите, тупые вы просто, ни задачки решить не можете, ни гениальности курса понять…

seiken ★★★★★
()
Ответ на: комментарий от seiken

ну типо у них филиалы по всему миру и в россии тоже сбер купил франшизу, нам нельзя и for, case, printf и прочими функциями пользоваться

diosio
() автор топика
Ответ на: комментарий от diosio

Там нет преподов

Оно и видно. Ибо не только ^W - это не сигнал, а комбинация на клавиатуре, выдающая байт со значением меньше пробела, но даже ^C - не сигнал, а символ, общепринятый в каноничном режиме для генерации сигнала прерывания. В этом режиме можно назначить только intr-kill-quit сигналов (ещё два других - не перехватываемые), но на любые символы.

vodz ★★★★★
()
Ответ на: комментарий от seiken

Обычно такие задания препод высасывает из пальца

Правильно написал. Мне тут недавно подсунули задачку по теореме Ферма. И оказывается что я не сама тут тупая.

Liz812
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.