Gegeben FILE *, ist es möglich, den zugrunde liegenden Typ zu bestimmen? Das heißt, gibt es eine Funktion, die mir sagen wird, ob die Datei * eine Pipe oder ein Socket oder eine normale Datei auf der Festplatte ist?Unterscheiden einer Pipe von einer Datei in Unix
Antwort
Es gibt eine fstat(2)
Funktion.
Name stat, fstat, lstat - get Dateistatus
SYNTAX
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int fstat(int fd, struct stat *buf);
Sie können die fd erhalten, indem fileno(3)
aufrufen.
Dann können Sie S_ISFIFO(buf)
anrufen, um es herauszufinden.
Verwenden Sie die Funktion fstat(). Sie müssen jedoch den fileno() -Makro verwenden, um den Dateideskriptor aus der Datei FILE struct abzurufen.
#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);
Dies ist ein gutes Beispiel, aber für einen unerfahrenen Programmierer macht es keinen Sinn. F & A sollte immer auf das Basisproblem verallgemeinert werden, damit andere, die ähnliche Probleme haben, die Antwort in ähnlichen Kontexten verstehen können. Die Frage war, eine Pipe von einer Datei in Unix zu unterscheiden. Ihre Antwort zeigt, wie Sie einen Statistikmodus parsen. Es ist ein großartiges Beispiel, dass Sie die Frage nicht richtig beantwortet haben. Die Antwort auf diese Frage lautet: FILE * fp = fopen (Pfad, "r"); int fd = Dateino (fp); struct stat statbuf; fstat (fd, & statbuf); if (S_ISFIFO (statbuf.st_mode)) // es ist eine Pipe! ' –
- 1. Unterscheiden einer Pipe von einer Datei in Windows
- 2. Problem mit Unix-Pipe-Befehl
- 3. Pipe & dup Funktionen in UNIX
- 4. Zwei Git Zweige in einer Datei unterscheiden
- 5. Debugger für Unix-Pipe-Befehle
- 6. Unterscheiden zwischen einer Datei und einem Verzeichnis in einer Sammlung
- 7. Wie zu einer Datei pipe (NodeJS)
- 8. Unix regex für Inhalte in einer Datei
- 9. Unterscheiden einer Datensatzinstanz von einer Karte
- 10. Ausführen des Inhalts in einer Datei (Unix)
- 11. Unterscheiden von Instrumenten in einer Musikdatei
- 12. Öffnen einer Datei unter Unix mit C++
- 13. Unix-Tool, um doppelte Zeilen aus einer Datei zu entfernen
- 14. Unterscheiden zwischen einer Variablen und einer Konstante
- 15. Kombinieren von zwei Befehlen mit einer Pipe
- 16. Suche eine Zeichenfolge in einer Datei, die auch in einer anderen Datei in Unix
- 17. Sind Unix-Pipe (|) und Pipe wir erstellen mit "Pipe (int Pipefd [2])" in c die gleiche?
- 18. Was bedeutet eine Pipe in einer Klassendefinition?
- 19. fork/pipe/close in einer rekursiven Funktion
- 20. Pipe jede Zeile einer Datei zu einem Befehl
- 21. UNIX-Skript - Verschieben eines Zeichens in jeder Zeile einer Datei
- 22. Unix-Shell ersetzt ein Wort mit Backtick in einer Datei
- 23. Erstellen einer Pipe zwischen C# und Ffmpeg
- 24. Zeilen aus einer Textdatei in Unix kombinieren?
- 25. Unix-Shell-Skript zum Abschneiden einer großen Datei
- 26. node.js-http: auf lokale Unix-Pipe/Socket hören
- 27. Senden Sie mehrere Nachrichten zwischen einer systemeigenen Named Pipe und einer System.IO Named Pipe
- 28. Unix-Skript die erste Zeile einer Datei auf einem Mac
- 29. UNIX Shell in einer vernünftigen Sprache geschrieben?
- 30. Ersetzen einer Zeichenfolge in allen Dateien - Unix
könnte erwähnenswert gewesen sein: 'S_ISFIFO (buf.st_mode)' dieses Makro crawlt nicht die Struktur für Sie. –