LINUX.ORG.RU

esc-последовательности


0

0

Кто (драйвер терминали или он сам) распознает что пришла esc-
последовательность и как он отличает, что это именно esc-
последовательность, а не строка?
Напирмер: echo -ne "\007" будет гудок, а без -e его не будет.
Спасибо!

anonymous

Терминал тут не при чем. Читай man про echo. (man bash, etc).

anonymous
()

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

nobody ★★
()

А как дисциплина линии связи определяет что пришла именно
esc-последовательность, а не обыкновенная строка, которую
необходимо вывести. Как в примере с гудком описаным выше.
Спасибо.

anonymous
()

Коды символов < 0x20 и == 0x7f - считаются непечатными. За ними закреплены определенные действия. В частности 0x07 ('\b') == bell (гудок), 0x0a ('\n') == new_line (переход к новой строке), и т.д. Если драйвер, работая в стандартном режиме, обнаруживает символ, который он считает непечатным, он думает, что это - код команды, за которым могут идти параметры для этой команды (в зависимости от кода). Чтобы избежать этого, программер может перевести терминал в режим отображения всех символов. На выходе из проги терминал должен быть возвращен обратно, иначе оболочка не будет работать как положено.

nobody ★★
()

2nobody: Спасибо, как про непечтные символы написал, сразу
все понял, даже для верности прогу написал ;-)

#include <stdio.h>
int main(void)
{
printf("%c", 7);
return 0;
}

Значит комманда echo при указании опции -e посылает ascii
символ 007, а без -e ->0x37.

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