Здравствуйте.
Есть один ман (man 3 termios). В нем определятеся структура с опциями последовательного интерфейса:
tcflag_t c_iflag; /* input modes */
tcflag_t c_oflag; /* output modes */
tcflag_t c_cflag; /* control modes */
tcflag_t c_lflag; /* local modes */
cc_t c_cc[NCCS]; /* special characters */
Флагов для этих опций там штук сто не меньше.
И есть функция cfmakeraw(), которая:
sets the terminal to something like the «raw» mode of the old Version 7 terminal driver: input is available character by character, echoing is disabled, and all special processing of terminal input and output characters is disabled. The terminal attributes are set as follows:
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;
А волнует меня вот что. Функция cfmakeraw() отключает лишь несколько флагов. А реально флагов намного больше. А вдруг флаги, которые данная функция не отключила, будут влиять на input/output и он таки не будет raw?
Также в одной програме видел вот такое решение:
/* Output options - none = raw */
s_options.c_oflag = 0;
/* Local options - raw input, no clever processing, no echo */
s_options.c_lflag = 0;
Правильно ли так поступать? Нет ли в этом решении каких-то подводных камней