Mein C/C++ - Programm nimmt eine Datei von der Befehlszeile als Argument. Das Lesen von Daten aus 'regulären Dateien' ist kein Problem/eine allgemeine Programmieraufgabe, aber wenn die Datei von einer 'Geräte-Pipeline' kommt, wie zum Beispiel/dev/fd/63, stürzt mein Programm ab.Der Versuch, den Inhalt einer Gerätepipeline in einen Puffer zu lesen, verursacht Fehler
zu reproduzieren:
von Ihrer freundlichen Nachbarschaft Bash-Shell ein ‚Gerät pipe‘ als Datei an Ihre Anwendung liefern. Ihre App sollte versuchen, den Inhalt der Datei in einem Puffer zu lesen.
./yourapp < (Echo 'Hallo Welt!'); #/dev/fd/xx enthält die Ausgabe des Befehls echo.
Hinweis der obige Befehl wird die Standardeingabe der Anwendung nicht umgeleitet und das ist nicht das beabsichtigte Ergebnis ..
Ich glaube nicht, dass viele Leute wissen, dass dies ihre Anwendung abstürzt. Die Anwendung 'Seed' aus dem Gnome-Projekt verwendet glib, um ihre E/A zu tun, aber sie kann aus diesen Dateien gut lesen. Der Befehl 'cat' kann diese Situation auch elegant behandeln. Warum versuche ich, den Inhalt dieser Named Pipe wie eine normale Datei zu lesen, bekommt meine Anwendung den Absturzfehler?
EDIT: relavent Codeabschnitt
#include <stdio.h>
int main(int argc, char **argv) {
FILE *file;
char *buffer;
unsigned long fileLen;
//Open file
file = fopen(argv[1], "rb");
if (!file) return -1;
//Get file length
fseek(file, 0, SEEK_END);
fileLen=ftell(file);
fseek(file, 0, SEEK_SET);
//Allocate memory
buffer=(char *)malloc(fileLen+1);
if (!buffer){
fprintf(stderr, "Memory error!");
fclose(file);
return -2;
}
//Read file contents into buffer
fread(buffer, fileLen, 1, file);
fclose(file);
fprintf(stdout, "Size: %i", fileLen);
free(buffer);
}
Ich denke, etwas ist wahrscheinlich falsch. –
_What_ Fehler oder Absturz erhalten Sie? Haben Sie versucht, das Programm in einem Debugger auszuführen, um festzustellen, wo der Fehler liegt? –
Zeigen Sie uns Ihren Code. – cnicutar