write vs. voller Datentraeger

21/07/2009 - 19:44 von Stefan Reuther | Report spam
Hallo,

ich habe hier (in einer Embedded-Umgebung, die sich teilweise für ein
Unix hàlt) einen Filesystem-Stack implementiert. Meine Implementation
von 'write' liefert, wenn der Datentràger voll ist, 0. das entspricht
z.B. der Beschreibung in dieser Manpage:
<http://www.freebsd.org/cgi/man.cgi?...t=html>
"On success, the number of bytes written is returned (zero indicates
nothing was written)."

Nun haben wir festgestellt, dass die verwendete Implementation von stdio
(nur im Objektcode verfügbar) 'fwrite' offenbar so implementiert:
int nbytes = size*count;
while (nbytes > 0) {
int written = write(fd, buffer, nbytes);
if (written < 0) return -1;
buffer += written, nbytes -= written;
}
Heißt: sie geht bei vollem Datentràger in eine Endlosschleife.

Nun die Frage: wer hat recht? Beziehungsweise: was ist so üblich? Muss
mein 'write' in diesem Fall z.B. ENOSPC zurückgeben, oder darf ich obige
stdio dem Hersteller um die Ohren hauen?


Stefan
 

Lesen sie die antworten

#1 Rainer Weikusat
21/07/2009 - 19:41 | Warnen spam
Stefan Reuther writes:
ich habe hier (in einer Embedded-Umgebung, die sich teilweise für ein
Unix hàlt) einen Filesystem-Stack implementiert. Meine Implementation
von 'write' liefert, wenn der Datentràger voll ist, 0. das entspricht
z.B. der Beschreibung in dieser Manpage:
<http://www.freebsd.org/cgi/man.cgi?...t=html>
"On success, the number of bytes written is returned (zero indicates
nothing was written)."

Nun haben wir festgestellt, dass die verwendete Implementation von stdio
(nur im Objektcode verfügbar) 'fwrite' offenbar so implementiert:
int nbytes = size*count;
while (nbytes > 0) {
int written = write(fd, buffer, nbytes);
if (written < 0) return -1;
buffer += written, nbytes -= written;
}
Heißt: sie geht bei vollem Datentràger in eine Endlosschleife.

Nun die Frage: wer hat recht? Beziehungsweise: was ist so üblich? Muss
mein 'write' in diesem Fall z.B. ENOSPC zurückgeben, oder darf ich obige
stdio dem Hersteller um die Ohren hauen?



Pragmatisch gesehen waere es wohl einfacher, einen Fehler
zurueckzugeben anstatt darauf zu bauen, dass man jemand anderen davon
ueberzeugen kann, dass in seinem Code einer vorhanden sei. Zumal
dieses Verhalten ja durchaus von anderen Kunden benoetigt werden
koennte.

Ähnliche fragen