Dado un descriptor de archivo arbitrario, ¿puedo bloquearlo si no es bloqueante? ¿Si es así, cómo?En c, ¿cómo hacer que un descriptor de archivo bloquee?
9
A
Respuesta
11
Ha sido un tiempo desde que jugué con C, pero se puede usar la función fcntl() para cambiar las banderas de un descriptor de archivo:
#include <unistd.h>
#include <fcntl.h>
// Save the existing flags
saved_flags = fcntl(fd, F_GETFL);
// Set the new flags with O_NONBLOCK masked out
fcntl(fd, F_SETFL, saved_flags & ~O_NONBLOCK);
7
Yo esperaría que simplemente no se establecía la marca O_NONBLOCK
debe revertir la descriptor de archivo en el modo predeterminado, que es el bloqueo:
/* Makes the given file descriptor non-blocking.
* Returns 1 on success, 0 on failure.
*/
int make_blocking(int fd)
{
int flags;
flags = fcntl(fd, F_GETFL, 0);
if(flags == -1) /* Failed? */
return 0;
/* Clear the blocking flag. */
flags &= ~O_NONBLOCK;
return fcntl(fd, F_SETFL, flags) != -1;
}
Cuestiones relacionadas
- 1. Cómo hacer que ChildWindow bloquee
- 2. ¿ftell en un descriptor de archivo?
- 3. ¿Cómo obtener un puntero ARCHIVO desde un descriptor de archivo?
- 4. descriptor de socket vs descriptor de archivo
- 5. descriptor de archivo de un std :: fstream
- 6. ¿Fopen crea un descriptor de archivo?
- 7. ¿Cómo determinar si un descriptor de archivo es buscable?
- 8. Cómo volver a abrir un descriptor de archivo cerrado
- 9. ¿Cómo ejecutar un programa desde el descriptor de archivo?
- 10. En bash, ¿cómo abro un descriptor de archivo modificable que se puede redireccionar externamente?
- 11. ¿Cómo verificar si un descriptor de archivo tiene datos disponibles?
- 12. ¿Cómo obtener una secuencia FILE * desde un descriptor de archivo?
- 13. ¿Cuánta información se almacena realmente en un descriptor de archivo?
- 14. Cómo acceder al descriptor de archivo de Open File
- 15. NUL descriptor de archivo (isatty es falso)
- 16. Malo descriptor de archivo en Ruby Demonios
- 17. ¿Cómo puedo convertir un puntero de archivo (FILE * fp) a un descriptor de archivo (int fd)?
- 18. ¿Qué hace que seleccione (2) si cierra (2) un descriptor de archivo en un hilo separado?
- 19. llamando fdopen: descriptor de archivo incorrecto
- 20. El uso de un descriptor de archivo numerado desde Java
- 21. ¿Cómo puedo obtener un nombre de archivo de un descriptor de archivo dentro de un módulo kernel?
- 22. Prevenir que Tcl se bloquee en el comando desconocido
- 23. removeFromSuperview hace que mi aplicación se bloquee
- 24. Cómo cerrar un descriptor de archivo de otro proceso en sistemas Unix
- 25. Descriptor de archivo duplicado con su propio desplazamiento de archivo
- 26. Hacer que el código fuente de un código bloquee la entrada a otro bloque de código en Emacs org-mode
- 27. ¿Qué condiciones ocasionan que NetworkStream.Write bloquee?
- 28. Node.js: EBADF, descriptor de archivo incorrecto
- 29. ¿Qué hace epoll con un descriptor de archivo que hace referencia a un directorio?
- 30. ¿Por qué C# no permite que se bloquee un valor nulo?
Sí, este es el método aceptado. Buena respuesta y buen enfoque para hacer el fcntl con ~ O_NONBLOCK. :) – BobbyShaftoe