Почему вывод этой программы не подчеркивается
int main() {
tgetent(NULL, getenv("TERM"));
tputs(tgetstr("us", NULL), 1, &putchar);
write(1, "Hello world!\n", 13);
tputs(tgetstr("ue", NULL), 1, &putchar);
}
но это есть?
int main() {
tgetent(NULL, getenv("TERM"));
tputs(tgetstr("us", NULL), 1, &putchar);
puts("Hello world!");
tputs(tgetstr("ue", NULL), 1, &putchar);
}
ИЗМЕНИТЬ
Проблема действительно в управлении буфером! Если я добавлю fflush
, строка будет правильно подчеркнута
int main() {
tgetent(NULL, getenv("TERM"));
tputs(tgetstr("us", NULL), 1, &putchar);
fflush(stdout);
write(1, "Hello world!\n", 13);
tputs(tgetstr("ue", NULL), 1, &putchar);
}
write()
подрывает это. Вам нужно будетrefresh()
разместить информацию о termcap/terminfo. Тогда, возможно, если вам повезет,write()
сработает. Но вы не должны смешивать функции termcap/terminfo с низкоуровневыми функциямиwrite()
(илиread()
). - person Jonathan Leffler   schedule 28.09.2020write()
отличается от функций более высокого уровня, таких какputchar()
иputs()
? Помимо управления буфером? - person GingerBadger   schedule 28.09.2020curses
, а не толькоtermcap
илиterminfo
. Потом мне снились кошмары.... Затем я посмотрел на справочную страницу (man 3 tputs
на Mac), и они, в конце концов, являются частьюcurses
— и поэтому вполне вероятно, что все связано с управлением буфером. Вы не показали MCVE (минимальный, полный, проверяемый пример — или MRE или любое другое имя, которое сейчас использует SO) или SSCCE ( Короткий, автономный, правильный пример). Что еще есть в программе? - person Jonathan Leffler   schedule 28.09.2020The issue is, indeed
пожалуйста, опубликуйте это как ответ на ваш вопрос. - person KamilCuk   schedule 28.09.2020