Dado un ARCHIVO *, ¿es posible determinar el tipo subyacente? Es decir, ¿hay una función que me dirá si el ARCHIVO * es una tubería o un zócalo o un archivo regular en el disco?Distinguir una tubería de un archivo en Unix
Respuesta
Hay una función fstat(2)
.
NOMBRE stat, fstat, lstat - obtener el estado del archivo
SINOPSIS
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int fstat(int fd, struct stat *buf);
Puede obtener el fd llamando fileno(3)
.
Luego puede llamar al S_ISFIFO(buf)
para averiguarlo.
Utilice la función fstat(). Sin embargo, deberá usar la macro fileno() para obtener el descriptor de archivo del archivo FILE struct.
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
FILE *fp = fopen(path, "r");
int fd = fileno(fp);
struct stat statbuf;
fstat(fd, &statbuf);
/* a decoding case statement would be good here */
printf("%s is file type %08o\n", path, (statbuf.st_mode & 0777000);
Este es un buen ejemplo, pero para un codificador inexperto no tiene sentido. Las preguntas y respuestas siempre deben generalizarse al problema base para que otras personas con problemas similares puedan entender la respuesta en contextos similares. La pregunta era distinguir una tubería de un archivo en Unix. Tu respuesta solo muestra cómo analizar un modo de estadísticas. Es un gran ejemplo que simplemente no respondió la pregunta correctamente. La respuesta a esta pregunta es 'FILE * fp = fopen (ruta," r "); int fd = fileno (fp); struct stat statbuf; fstat (fd, & statbuf); if (S_ISFIFO (statbuf.st_mode)) // ¡es una pipa! ' –
- 1. Distinguir instrumentos en un archivo de música
- 2. ¿Cómo distinguir un asa de socket Win32 de otros mangos de tubería?
- 3. UNIX - recuento de columnas en el archivo
- 4. Abrir un archivo en Unix usando C++
- 5. qué es un archivo normal en unix
- 6. ¿Tubería en la línea de comandos que simula un archivo?
- 7. ¿Cómo distinguir un archivo de una carpeta durante la carga usando arrastrar y soltar en jquery?
- 8. Comportamiento de una tubería después de una horquilla()
- 9. Unix: anteponer un archivo sin un archivo ficticio?
- 10. ¿Cómo imprimo un campo desde un archivo separado por tubería?
- 11. ¿Cómo puedo distinguir dos archivos en Perl?
- 12. C# - ¿Dividir en una tubería con una tubería escapada en los datos?
- 13. Buscar el propietario de un archivo en Unix
- 14. ¿Cómo hacer que la producción de tubería desde un script Ruby a 'cabeza' sin conseguir una tubería rota de error
- 15. tubería postgres COPIA en python con psycopg2
- 16. Opciones para | (tubería) comando
- 17. Cómo obtener el PID de un proceso en una tubería
- 18. Distinguir una instancia de registro de un mapa
- 19. unix redirigir cola al archivo
- 20. ¿Cómo distinguir un marco de una biblioteca de funciones?
- 21. Unix: Cómo borrar archivos que aparecen en un archivo
- 22. Eliminar archivo en C++ bajo UNIX
- 23. ¿Cómo puedo descomprimir un archivo tar.bz en Unix?
- 24. Cómo distinguir líneas superiores de dos archivos sin archivo intermedio
- 25. imágenes que empujan en una tubería GStreamer
- 26. Multiprocesamiento en una tubería hecho bien
- 27. PhantomJS: entrada de tubería
- 28. ¿Cómo concatenar stdin en una tubería?
- 29. E/S superpuestas en una tubería anónima
- 30. cómo extraer bytes específicos de un archivo utilizando unix
podría haber sido útil mencionar: 'S_ISFIFO (buf.st_mode)' esta macro no rastrea la estructura por usted. –