Для приложения на C++, как я могу программным способом принудительно завершать файл (EOF) на stdin?Как заставить eof на stdin?
ответ
Собственно, вы не можете. Пока вы можете читать данные из stdin, EOF не был достигнут, и на самом деле вы никогда не сможете его достичь. Однако вы можете закрыть сам stdin
. Для того, чтобы закрыть его, сделайте следующее:
fclose(stdin);
После этого, вы не можете прочитать данные из stdin
.
Если вы используете терминал в Unix-подобной системе, нажмите Ctrl-D
. В Windows, Ctrl-Z
.
Редактировать: Увидев желание сделать это «программно», я предлагаю попробовать fclose(stdin)
. Если что-то не так хорошо, более суровой идеей может быть использование std::cin.rdbuf()
, чтобы установить поток для ссылки на нечто иное, чем истинный stdin, а затем сделать то, что вы хотите для этого потока. Но это начинает плохо пахнуть, как будто вы боретесь с компьютером, поэтому я хотел бы узнать больше о том, какова настоящая цель.
Для каждого потока, созданного специально для этого, есть небольшая функция.
Это синтаксис что-то вроде:
stream.setstate(stream.flags)
Так что в вашем коде, вы можете иметь простое условие, которое вызывает что-то вроде:
std::cin.setstate(std::cin.eofbit);
документация для этого является довольно скудной, но есть какая-то на cppreference.com и cplusplus.com.
- 1. Как отправить EOF на stdin в paramiko?
- 2. Почему пустой STDIN с EOF
- 3. Как заставить readlines() игнорировать символ EOF 0x1A?
- 4. Как сигнализировать EOF на node.js stdin с консоли?
- 5. C++ - getline stdin EOF не работает
- 6. Прочитайте весь stdin до EOF в C
- 7. Поведение Stdin и EOF под консолью Windows
- 8. Подождите, пока EOF при использовании stdin
- 9. Ctrl сигналы заполняют stdin с помощью EOF?
- 10. Повторное чтение в EOF от stdin
- 11. Восстановить stdin от eof в C
- 12. Почему поврежденное сетевое соединение вызывает EOF на stdin?
- 13. Haskell GHCi - Использование символа EOF на stdin с getContents
- 14. Обнаружение EOF в C++ из файла перенаправляется на STDIN
- 15. Как проверить EOF на `read_line()`?
- 16. Как заставить rsync читать SRC от STDIN?
- 17. Как сигнализировать EOF о stdin, когда в терминале mac osx?
- 18. Как написать EOF в STDIN POPEN в питона
- 19. Как узнать, когда stdin пуст, если он содержит EOF?
- 20. Неожиданное поведение fgets на EOF
- 21. NodeJS: Отправить EOF в поток stdin без закрывающего потока
- 22. nodejs pipe stdin в zlib надуть без ожидания EOF
- 23. Последняя строка stdin не читается при обнаружении EOF
- 24. getchar() петли над EOF, когда STDIN подается через трубу
- 25. Обнаружение EOF с помощью fgets(), где filesteam is stdin
- 26. Гарантирует ли apache, что stdin всегда будет иметь EOF?
- 27. Программа не останавливается на EOF
- 28. Bash - аутентификация Sudo с использованием stdin и EOF
- 29. Программа продолжает читать из перенаправленного stdin после EOF
- 30. Подпроцессы Python испытывают таинственную задержку при получении stdin EOF
Как вы называете «force EOF on stdin»? Вы можете закрыть stdin (или cin). Вы можете отключить свою петлю в одностороннем порядке. Вы можете найти конец файла (но это не поможет с подключением терминала или канала). Возможно, вы можете задать проблему с помощью функции 'freopen()'; переназначить стандартный ввод для чтения из/dev/null или NUL :. –