Dato un FILE *, è possibile determinare il tipo sottostante? Cioè, c'è una funzione che mi dirà se il FILE * è una pipe o un socket o un normale file su disco?Distinguere una pipe da un file in Unix
risposta
C'è una funzione fstat(2)
.
NOME stat, fstat, lstat - ottenere lo stato del file
SINOSSI
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int fstat(int fd, struct stat *buf);
È possibile ottenere il fd chiamando fileno(3)
.
Quindi è possibile chiamare S_ISFIFO(buf)
per capirlo.
Utilizzare la funzione fstat(). Tuttavia, è necessario utilizzare la macro fileno() per ottenere il descrittore di file dalla struttura FILE del file.
#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);
Questo è un buon esempio, ma per un coder inesperto non ha senso. Le domande e risposte dovrebbero sempre essere generalizzate al problema di base in modo che altre persone con problemi simili possano comprendere la risposta in contesti simili. La domanda era distinguere una pipe da un file in unix. La tua risposta mostra solo come analizzare una modalità stat. È un ottimo esempio per cui non hai risposto correttamente alla domanda. La risposta a questa domanda è 'FILE * fp = fopen (path," r "); int fd = fileno (fp); struct stat statbuf; fstat (fd, & statbuf); se (S_ISFIFO (statbuf.st_mode)) // è una pipe! ' –
- 1. pipe Unix in ls
- 2. unix pipe più scrittori
- 3. Distinguere tra una directory e un file Unix in C e C++
- 4. Come eliminare una riga specifica da un file in unix?
- 5. Implementazione di pipe in una shell C (Unix)
- 6. Sono unix pipe (|) e pipe che creiamo usando "pipe (int pipefd [2])" in c lo stesso?
- 7. pipe UNIX on C block on read
- 8. Come distinguere un handle di socket Win32 da altri handle di pipe?
- 9. Ottieni una stringa da un array \ oggetto in pipe yahoo?
- 10. Combinare le linee da un file di testo in Unix?
- 11. Come creare un nuovo file in Unix
- 12. Come posso distinguere un file dalla directory in Python?
- 13. Distinguere tra cartelle e file in C++
- 14. Come includere il carattere pipe in un argomento in un file batch da uno script bash?
- 15. IPC vs dominio pipe vs named pipe
- 16. node.js-http: ascolta su unix locale pipe/socket
- 17. strumento unix per rimuovere le righe duplicate da un file
- 18. Come convertire file da Dos a Unix
- 19. fuga pipe ("|") in una regex
- 20. Unix FIFO in go?
- 21. Perché la presa dello stdin da un file differisce dal riceverlo su una pipe?
- 22. È possibile ottenere gcc per leggere da una pipe?
- 23. Come rinominare più file da un'estensione all'altra in Linux/Unix?
- 24. confrontare due file in UNIX
- 25. Sostituire una stringa in tutti i file - Unix
- 26. Rinominare i file in una directory UNIX - scripting della shell
- 27. Lettura/scrittura da un socket Unix in Ruby
- 28. invertire un file nella shell Unix
- 29. Come uscire da un simbolo pipe (|) per url_encode in python
- 30. unix - numero di colonne nel file
avrebbe potuto essere degno di nota: 'S_ISFIFO (buf.st_mode)' Questa macro non strisciare la struttura per voi. –