Кажется, я не могу заставить работать команду "cl" termcap
, но код выхода терминала работает.
Например:
#include <termcap.h>
#include <stdio.h>
int main()
{
tputs(tgetstr("cl", NULL), 1, putchar);
}
Это не меняет терминал. Но когда я бегу:
#include <stdio.h>
int main()
{
printf("\e[2J");
}
или если я позвоню echo `tput cl`
Терминал очищен.
Почему это происходит? Разве termcap
не должен выдавать тот же самый escape-код?
Обновлено: исправлено написание символов
РЕДАКТИРОВАТЬ2: Это потому, что я не звонил в tgetent()
перед звонком в tgetstr()
. Спасибо, парни!
Согласно руководству GNU для termcap, возможность cl
доступна во всех системах. Хм...
Ваша функция ft_puts
полностью нарушена, и вы не вызывали setupterm
. Это не сработает.
... на самом деле, позвольте мне это исправить. Ваш ft_puts
может работать на платформах с прямым порядком байтов.
Чтобы расширить точку зрения мелпомены, ваша функция берет int
размером не менее двух байтов и записывает один из них. Что в этом байте? Кто знает!
Перед опросом с tgetstr()
необходимо найти описание пользовательского терминала с tgetent()
:
#include <stdio.h>
#include <stdlib.h> // getenv
#include <termcap.h> // tgetent tgetstr
int main(void)
{
char buf[1024];
char *str;
tgetent(buf, getenv("TERM"));
str = tgetstr("cl", NULL);
fputs(str, stdout);
return 0;
}
Компилировать с -ltermcap
... или просто -ltermcap
.
@Polluks, спасибо, что указали на это :)
Функция tgetstr () возвращает NULL, если возможность не была найдена. Теперь вопрос - почему он не может его найти ...