Was sind die Hauptunterschiede zwischen fwrite und write?

8

Ich schreibe gerade eine Callback-Funktion in C :

%Vor%

Diese Funktion wird in einer anderen Funktion verwendet, die eine HTTP -Anforderung ausführt, die Anforderung abruft und sie auf den lokalen Rechner schreibt. Diese writedata -Funktion wird für den späteren Teil verwendet. Die gesamte Operation muss multithreaded sein, also war ich zwischen write und fwrite nicht sicher. Könnte jemand mir helfen, die Unterschiede zwischen write() und fwrite() in C zu skizzieren, damit ich wählen kann, welche am besten zu meinem Problem passt?

    
cybertextron 10.07.2012, 13:18
quelle

2 Antworten

16

fwrite schreibt in ein FILE* , d. h. einen (potentiell) gepufferten stdio -Stream. Es ist durch den ISO C-Standard spezifiziert. Darüber hinaus ist fwrite in POSIX-Systemen zu einem gewissen Grad threadsicher .

write ist eine API der unteren Ebene, die auf Dateideskriptoren basiert und im POSIX-Standard beschrieben wird. Es weiß nichts über Pufferung. Wenn Sie es für FILE* verwenden möchten, rufen Sie seinen Dateideskriptor mit fileno ab, aber stellen Sie sicher, dass Sie den Stream manuell sperren und leeren, bevor Sie versuchen, write .

zu versuchen

Verwenden Sie fwrite , wenn Sie nicht wissen, was Sie tun.

    
Fred Foo 10.07.2012, 13:22
quelle
1

Die Funktion write ist ein Aufruf, den Ihr Programm an das Betriebssystem sendet, und ist daher langsamer als fwrite . Es fehlt auch an buffering , was es sogar langsamer macht, weil die Philosophie der Pufferung folgendes nahelegt: "Es ist schneller, viele Teile von kleinen Dateien zu verarbeiten als große." Es ist auch wichtig, dass write nicht Teil des c-Standards ist, also werden Sie wahrscheinlich nicht POSIX-Systeme finden und (selten) wird die entsprechende Verwendung abweichen. Sie sollten auch wissen, dass fwrite und fread manchmal mit write und read implementiert werden (eine einfache Implementierung finden Sie im Kapitel über Unix von K & amp; R).

Eine weitere bemerkenswerte Sache ist, dass read und write Dateideskriptoren verwenden, aber fread und fwrite verwenden das < strong> FILE-Zeiger , die eigentlich Zeiger sind, die Dateideskriptoren und andere Informationen über die geöffnete Datei enthalten.

    
Gtiou 13.07.2012 19:08
quelle

Tags und Links