Fehlerbehandlung in while()-Kopf
-
Hallo alle zusammen,
ich brauche jeweils für read und write Fehlerbehandlungen. D.h. ich muss prüfen ob read oder write -1 zurückgibt (Fehlerfall). Sollte dies der Fehler sein, muss ich den return-Wert der Funktion ändern. Nur weiß ich leider nicht wie ich das anstellen soll mit der Fehlerbehandlung im Schleifenkopf. Hat jemand von euch Rat ?
while ((n = read(fin, buffer, BUFSIZ)) > 0) write(fout, buffer, BUFSIZ);
Vielen Dank
bluma
-
Du hast da mehrere Möglichkeiten.
Die eine besteht darin, einfach nach der while-Schleife abzufragen, welchen Wert 'n' hat:while ((n = read(fin, buffer, BUFSIZ)) > 0) write(fout, buffer, BUFSIZ); if(n == -1) return ERROR; /* weitere Aktionen, falls n==0, d.h. alles erfolgreich kopiert */ return OK;
Und für write brauchst du einfach eine Abfrage innerhalb der Schleife:
while ((n = read(fin, buffer, BUFSIZ)) > 0) if(write(fout, buffer, BUFSIZ) == -1) return ERROR; return n==-1? ERROR : OK; // kürzere Variante, falls nur noch ein Wert zurückgegeben werden soll (und keine weiteren Aktionen)
-
Hä?
Genau das machst du doch im Schleifenkopf.
Sobald read einen Fehler gibt, wird die Schleife ja abgebrochen.
Und bei write machst du halt noch eine entsprechende Abfrage.Was du noch tun könntest wäre errno abzufragen (->google),
und im Fehlerfall dann die entsprechende Meldung auszugeben.
-
Und für write brauchst du einfach eine Abfrage innerhalb der Schleife:
while ((n = read(fin, buffer, BUFSIZ)) > 0) if(write(fout, buffer, BUFSIZ) == -1) return ERROR; return n==-1? ERROR : OK;
Ich habe im Eifer ganz übersehen, dass ich einfach n prüfen kann. Danke für diesen Tipp. Nun ist es kein Problem mehr.
Grüße
bluma