В настоящее время я внедряю Scheme R5RS в C, и я застрял, пытаясь реализовать функцию (char-ready?).
У меня есть спецификации для функции, приведенной ниже.Функция гарантированно не блокируется.Стандартные функции C, такие как fgetc (), блокируют все входные данные при вызове, когда нет готовых входных данных.
Кто-нибудь знает, есть ли способ реализовать это простым и приятным способом, не создавая выделенный поток ввода-вывода?
Редактировать: Мой тип входного потока - ФАЙЛ *, который может быть stdin или файлом, открытым с помощью fopen ().
(готовая к работе?) Процедура
(char-ready? Port) процедура
Возвращает #t, если символ готов к входному порту, и возвращает #f в противном случае.Если char-ready возвращает #t, то следующая операция read-char на данном порту гарантированно не будет зависать.Если порт находится в конце файла, то он готов к загрузке?возвращает #t.Порт может быть опущен, в этом случае по умолчанию используется значение, возвращаемое текущим входным портом.
Обоснование:
Готов к Char?существует для того, чтобы программа могла принимать символы из интерактивных портов, не застревая в ожидании ввода.Любые входные редакторы, связанные с такими портами, должны гарантировать, что символы, существование которых было подтверждено char-ready?нельзя стиратьЕсли вы готовы?если в конце файла вернуть #f, порт в конце файла будет неотличим от интерактивного порта без готовых символов.