2013-12-04 3 views
1

Работа над сетевым проектом и использование select() и FD_ISSET для одновременного просмотра stdin, а также TCP-соединений. Я не могу записать запись клавиатуры в буфер, чтобы я мог ее обработать. Вот что у меня есть:Копирование stdin в буфер

if (FD_ISSET(0, &read_set)) { 

    fprintf(stdout, "Keyboard input noted:\n"); 

    size_t bytes = fread(buffer, sizeof(char), BUFFSIZE, stdin); 
    fwrite(buffer, sizeof(char), bytes, stdout); 
    fflush(stdout); 
    if (bytes < BUFFSIZE) 
     if (feof(stdin)) 
      break; 

    fprintf(stdout, "buffer: %s\n", buffer); 
} 

Первые Printf заявление выхода, как только я ударил клавишу ввода, но второй один не срабатывает. Может ли кто-нибудь сказать мне, что мне не хватает? Благодаря!

EDIT: Когда я изменяю size_t bytes = fread(buffer, sizeof(char), BUFFSIZE, stdin); к чему-то вроде

size_t bytes = fread(buffer, sizeof(char), 2*sizeof(char), stdin); 

, а затем ввести в нечто вроде aa<enter> я могу заставить его выход, но это слишком мало. Мне нужно, чтобы он возвращался из fread при чтении ключа ввода.

+0

Попробуйте записать 'bytes' в stderr. – woolstar

+0

Вы нажимаете 'break'? –

+0

@woolstar Я изменил строку fwrite на 'fwrite (buffer, sizeof (char, ytes, stderr);' - все еще нет вывода – Alex

ответ

0

Я переключил fread строку

size_t bytes = read(0, buffer, BUFFSIZE) 

и получает мимо проблема fread не возвращаются. К сожалению, это также похоже на символ возврата каретки, который дает мне дополнительный байт в конце моего буфера, который мне нужно удалить. Например, если я набираю 'aa', а затем вывод bytes, он показывает 3, а не 2. Теперь мне нужно выяснить, как решить эту проблему.

Любые лучшие ответы приветствуются. Спасибо всем.

+0

Почти все формы 'fread' и' read' дают вам новую строку. Просто вопрос обрезания конца буфера. Что-то вроде 'buffer [bytes -] = '\ 0'' – woolstar

+0

Большое спасибо! – Alex

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