Ich schreibe gerade eine Callback-Funktion in C
:
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?
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
.
Verwenden Sie fwrite
, wenn Sie nicht wissen, was Sie tun.
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.