Es simple generar un error de escritura en un conjunto de pruebas escribiendo al /dev/full
. ¿Hay una buena técnica para generar un error de lectura? Actualmente estoy usando LD_PRELOAD para anular read
, pero parece demasiado complicado y no portátil (no es que/dev/full es portable ...).Genere un error de lectura
Respuesta
Además de la lectura de un directorio (como se menciona en una respuesta anterior) se puede tratar de leer /proc/self/mem
para obtener un error (esto debe conseguir que un EIO
en Linux) Para obtener una explicación, consulte: https://unix.stackexchange.com/a/6302
Buen truco, pero ten en cuenta que '/ proc/self/mem' solo es bueno si lees desde el principio del archivo. Si el programa busca primero, podría terminar accidentalmente en una zona mapeada. – Gilles
De acuerdo con la página de manual (OS X) read (2), read (2) generará un error si "se intenta [n] leer un directorio". Por lo tanto, podría abrir (2) un directorio (asegúrese de que el prot no permita la escritura, o esto arrojará un error) y luego intente leer de él. Parece el único error allí enumerado que podría ocurrir en circunstancias "normales" (es decir, sin hacer algo como romper deliberadamente una estructura FILE *).
Supongo que está hablando de errores de lectura (2) en C o algo así, pero incluso en un lenguaje de nivel superior, es posible que pueda abrir un directorio e intentar leer de él (aunque Acabo de probarlo con Python, y es demasiado inteligente para permitirle abrir el directorio ...)
También podría pasar un puntero ilegal como buffer para leer, que devolvería un -EFAULT. algo como:
read(fd, (char *)0, cout);
Gracias Suzuki
Eso no generará un error de lectura (EINVAL), pero un búfer está fuera de su espacio de direcciones accesible (EFAULT) durante la lectura. Pero según el hombre 2 leído, debería ser posible llegar a EINVAL con una ligera modificación. Pero el punto en la pregunta parece ser "cómo llegar a EINVAL sin modificar el código sino produciendo un contenedor que emulará todas las situaciones de falla interesantes". – jpe
De hecho, el código no debe modificarse y el proceso debe abrir correctamente un archivo, realizar múltiples operaciones de E/S (tanto de lectura como de escritura), pero luego debe fallar alguna operación de lectura posterior. Esto es factible anulando la lectura e implementando un contador simple para que la enésima operación de lectura falle, pero sería bueno hacer algo de un script de shell similar a: 'kill -STOP $ pid; archivo chmod 000; matar -CONT $ pid'.Un método para obtener un error de escritura en condiciones similares sería bueno, ya que la escritura en/dev/completo falla en la primera escritura. –
Un enfoque que funciona en todos los principales equipos sería implementar un pequeño sistema de archivos FUSE. EIO es el código de error predeterminado cuando el controlador del sistema de archivos del espacio de usuario hace algo incorrecto, por lo que es fácil de lograr. Tanto los enlaces Perl y Python vienen con ejemplos para comenzar, puede escribir rápidamente un sistema de archivos que en su mayoría refleja los archivos existentes, pero inyecta un EIO en lugares cuidadosamente elegidos.
Existe un sistema de archivos existente: petardfs (article), no sé qué tan bien funciona de la caja.
Oh, +1: petardfs es claramente lo correcto. –
- 1. Causa que CMAKE genere un error
- 2. Hacer que un selector incorrecto genere un error de tiempo de compilación
- 3. m2e da un "error de lectura de proyecto" inescrutable
- 4. Error de lectura: error en la biblioteca SSL, por lo general un error de protocolo
- 5. Validación de primavera, cómo hacer que PropertyEditor genere un mensaje de error específico
- 6. C# BindingList de sólo lectura de error
- 7. boost :: asio, error de lectura asíncrona
- 8. ¿Cómo puedo evitar que se genere un atributo de validación?
- 9. ¿Cómo puedo informar a sqlalchemy que genere un error cada vez que MySQL arroje una advertencia?
- 10. ¿Cómo escribir una prueba que espera que se genere un error en Jasmine?
- 11. ¿Es posible que un objeto Exception genere otra excepción debido a su error interno?
- 12. Lectura del error del archivo JSON
- 13. Lectura de un QTcpSocket
- 14. Genere de manera eficiente un enrejado de puntos en python
- 15. asp.net - Genere un archivo de Powerpoint sobre la marcha
- 16. Android registro de error de lectura del teléfono
- 17. archivo de lectura de error en una matriz
- 18. JSHint dando el error 'Solo lectura' para la reasignación de $
- 19. Rubí lectura de error en el Certificado Archivo con OpenSSL
- 20. Ajuste campos de sólo lectura (¿Es este error?)
- 21. Genere un jar minimizado con solo las clases usadas
- 22. Genere un número aleatorio en el rango 1 - 10
- 23. Genere un archivo javascript sobre la marcha en asp.net mvc
- 24. ¿Hay una clase Java que genere un archivo POM.xml?
- 25. iOS SDK - Genere mediante programación un archivo PDF
- 26. ¿Qué causa específicamente que se genere EPrivilege?
- 27. error en la asignación del miembro de sólo lectura objeto
- 28. lectura de un ZipInputStream en un ByteArrayOutputStream
- 29. Lectura de un archivo remoto con Java
- 30. HTML5 archivo de API: Error de seguridad durante la lectura de un archivo
Solo un pensamiento, pero ¿qué tal leer de un archivo con las permanentes establecidas en 000? –
@Loadmaster Eso causará un error 'open' en lugar de un error' read'. –
¿Estás después de EINVAL? – jpe