2015-10-21 2 views
0

Я хочу напечатать каждый символ, который читается readline по мере его чтения. В настоящее время я могу явно распечатать все после того, как он полностью прочитан. Это для которая написана.Печатать символ в stdin как чтение по строке чтения

+0

Функция называется 'readline' по причине; эта причина заключается в том, что она позволяет пользователю вводить «строку» текста и редактировать, пока они делают это перед вызывающей программой, будь то оболочка или любая другая интерактивная программа, которая увидит каждого персонажа. Я думаю, вы пытаетесь использовать неправильную функцию. Вам понадобится что-то вроде входного режима raw curses - возможно, без использования «curses», поскольку это захватывает весь экран, и вы не хотите, чтобы это делалось. Тем не менее, Бэшу удается интерпретировать информацию, как она идет; Я не проверял, использует ли он библиотеку 'readline', но вы можете посмотреть. –

+0

Мне нужно повторить то, что набрано обратно в оболочку в основном. У меня проблемы с этим. Это не должно быть через readline, мне просто нужна помощь, повторяющая все. Однако я использую readline, чтобы действительно прочитать команду. – m0butt

+0

ОК. Вы можете прочитать руководство для библиотеки readline, как я могу. Или вы можете подождать, когда кто-то, кто знает ответ, придет и поможет вам. Чем больше я думаю об этом, такие вещи, как выполнение вкладок в Bash, предполагают, что Bash управляет им. Таким образом, вы можете посмотреть исходный код Bash и посмотреть, использует ли он библиотеку readline. Если это так, вы можете увидеть, что они используют в библиотеке. Если нет, это может дать вам некоторые идеи ... –

ответ

0

readline() является функцией блокировки и ждет полной строки.

Просто используйте read() в цикле. Если новый символ read() не будет возвращен 0, а если присутствует символ, он вернет 1 (или n, если n символов в stdin после последнего вызова read(), и вы предоставите буфер достаточно большой). Обычно стандартный ввод имеет дескриптор файла 0 зарезервирован для него, так что ваш код может быть как:

char buf[1]; 
int i; 

while(1) { 
    i = read(0, buf, 1); 
    if (i>0) 
    { 
    // process character 
    } 
} 

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

  • Нет связанных вопросов^_^