2013-04-06 3 views
0

Я написал обработчик сигнала, который печатает строку из буфера, сначала удаляет предыдущую приглашение, печатает строку и снова печатает приглашение в конце экрана. вот мой обработчик. 033 Приглашение в unix

void print(int param) 
{ 
    int c; 
    signal(SIGALRM, print); 
    printf("\b\b\b\b\b\b\b\b\b\b\033[0K"); 
    print_line(); 
    printf("\033[7m--HEY--\033[0m"); 
} 

Этот обработчик делает все, что я хотел, за исключением того, что я не мог видеть подсказку в конце экрана. Я не понимаю, почему я не вижу подсказки?

+0

У вас есть «escape-последовательности» в том, что вы печатаете. Зачем? –

+0

Поскольку я печатаю приглашение перед входом в этот цикл, поэтому сначала хочу удалить его и снова напечатать после печати строки. –

+0

'\ b' - это побег в обратном пространстве. Я говорю о том, где у вас '\ 0'. Я почти уверен, что это байт «null». Если компилятор не интерпретирует это как восьмеричную escape-последовательность '\ 033'. –

ответ

2

Стандартный выход обычно буферизирован. Конец с символом \n, или явно нажмите здесь:

fflush(stdout); 
+0

Я бы использовал fflush (stdout), чтобы избежать изменения поведения. –

+0

Большое спасибо, что помогло. –

Смежные вопросы