Para una aplicación C++, ¿cómo puedo forzar programáticamente un fin de archivo (EOF) en stdin?¿Cómo fuerzo eof en stdin?
Respuesta
En realidad, no se puede. Siempre que pueda leer datos de stdin, no se ha llegado a EOF y, de hecho, nunca podrá alcanzarlo. Sin embargo, puede cerrar el stdin
. Para cerrarla, hacer esto:
fclose(stdin);
Después de esto, no pueden leer datos de stdin
.
Si se encuentra en un terminal en un sistema tipo Unix, pulse Ctrl-D
. En Windows, Ctrl-Z
.
Editar: Habiendo visto el deseo de hacer esto "programáticamente", sugiero intentar fclose(stdin)
. Si de alguna manera eso no es lo suficientemente bueno, una idea más loca podría ser usar std::cin.rdbuf()
para configurar la transmisión para que se refiera a algo que no sea el stdin verdadero, y luego haga lo que quiera a esa transmisión. Pero esto empieza a oler mal, como si estuvieras luchando contra la computadora, así que me gustaría saber más sobre cuál es el verdadero objetivo.
Hay una pequeña función agradable disponible para cada flujo creado especialmente para esto.
Su sintaxis es algo así como:
stream.setstate(stream.flags)
Así que en su código que puede tener una condición simple que desencadena algo como:
std::cin.setstate(std::cin.eofbit);
La documentación para esto es bastante escasa, pero hay algo de en cppreference.com y cplusplus.com.
- 1. ¿Cómo puedo leer los contenidos de stdin (hasta EOF) en una cadena en PHP?
- 2. ¿Cómo reinicio Stdin en Haskell?
- 3. Lee STDIN (SYSIN) en COBOL
- 4. ¿Cómo verificar EOF en Python?
- 5. NodeJS: Enviar EOF a la corriente stdin sin secuencia de cierre
- 6. EOF Error en Imaplib
- 7. Detectando EOF en C
- 8. ¿Cómo probar el indicador EOF en R?
- 9. com.android.ddmlib.InstallException: EOF
- 10. comprobando eof en cadena :: getline
- 11. ¿Cómo fuerzo un Eclipse a desempaquetar?
- 12. ¿Cómo puedo probar STDIN sin bloquear en Perl?
- 13. ¿Cómo se lee la entrada estándar en la variable de cadena hasta EOF en C?
- 14. Formato stdin en bash
- 15. ¿Redirigir STDIN en bash?
- 16. wget o curl de stdin
- 17. (c = getchar())! = EOF en C#?
- 18. copy_n o hasta eof?
- 19. Cómo cambiar la codificación stdin en python
- 20. ¿Cómo concatenar stdin en una tubería?
- 21. ¿Cuál es la diferencia entre STDIN y $ stdin en Ruby?
- 22. Asegurar nueva línea en EOF en RubyMine
- 23. vaya websockets eof
- 24. ¿Cómo fuerzo a RAILS_ENV en una tarea de rake?
- 25. ¿Cómo fuerzo una actualización en una actividad de configuración?
- 26. leyendo stdin varias veces en bash
- 27. fgetc no identifica EOF
- 28. ¿EOF siempre es negativo?
- 29. Ifstream - Restablecer bit EOF
- 30. Ignorar la tecla de retroceso desde stdin
¿Qué significa 'force EOF on stdin'? Puedes cerrar stdin (o cin). Podrías hacer que tu ciclo termine unilateralmente. Puede buscar hasta el final del archivo (pero eso no ayudará con un terminal o una tubería como entrada). Es posible que puedas forzar el problema con 'freopen()'; reasignar entrada estándar para leer desde/dev/null o NUL :. –