Ich muss mit fread() die Sachen vom gelesenen Ende der Rohrleitung lesen.fread() Lesen von einem Deskriptor basierend auf einem Rohrsatzfehler, nicht EOF, wo es keine Daten gibt
Aber während ich erwarte, dass fread() EOF setzt, wenn sich nichts in der Pipe befindet, setzt es stattdessen den Fehlerindikator. Ich habe die Posix- und C-Standards überprüft und keine Ahnung gefunden. Wahrscheinlich tun, ich bin etwas unbeabsichtigte (lesen, albern), rechts :)
Hier ist der Auszug:
#include <stdio.h>
#include <fcntl.h>
int main()
{
char buf[128];
FILE *f;
int pipe_fd[2], n;
pipe(pipe_fd);
fcntl(pipe_fd[0], F_SETFL, O_NONBLOCK);
f=fdopen(pipe_fd[0], "r");
n=fread(buf, 1, 1, f);
printf("read: %d, Error: %d, EOF: %d\n", n, ferror(f), feof(f));
return 0;
}
Danke, Bert! Schaut so aus. Daher wird das EAGAIN nur bis zur Ebene der Streams weitergegeben und führt zu einer Fehlereinstellung. Also mein Ansatz wird nicht funktionieren. Ich versuche einfach, mit Lex auf eine normale Art und Weise fertig zu werden :) Seht weiter ... –
Ja, denke darüber nach, wenn EOF zurückgegeben wird, wenn die Pipe vorübergehend blockiert ist, dann wäre der Empfänger nicht in der Lage, alle Daten zu erkennen ist schon angekommen. Sie könnten keine Programme schreiben, die wirklich funktionieren (mit Pipes), wenn es so funktioniert, es sei denn, Sie hatten einige Protokolle, um die restlichen Daten wiederherzustellen. –