Wie mit sendfile geschickte Datei empfangen?
-
Hallo Leute,
ich bin dabei ein C++ Programm zu schreiben, mit dem ich (unter UNIX) u.a. eine Datei verschicken kann. Dazu verwende ich Stream Sockets. Für das Verschicken habe ich mal den sendfile Befehl ins Auge gefasst. Leider habe ich keinen passenden Befehl gefunden, mit dem ich die so verschickte Datei empfangen kann. Ich suche also nach einer Funktion, bei der ich den Descriptor eines akzeptierten Sockets (also den Rückgabewert eines accept Aufrufs) mit einem Filedescriptor verbinden kann, so dass die reinkommende Datei gleich als Datei gespeichert werden kann.
Gibt es so einen Befehl, oder kann man das garnicht so machen?Über eine Antwort würde ich mich echt Freuen
se7enUP
-
Uh...ich denke, das sollte auch mit sendfile gehen - nur dass du nicht von einer Datei in ein Socket, sondern von einem Socket in eine Datei sendest.
-
Hallo 0xdeadbeef,
danke für den Tipp! Leider bekomme ich immer die Fehlermeldung "Bad file number" von der Funktion sendfile zurück. Und das, obwohl die Argumente in Ordnung zu sein scheinen, denn den Socketdescriptor bekomme ich von accept und den Dateidescriptor von open und beide sind größer als Null.
Es weiß nicht zufällig jemand warum das so ist?
se7enUP
-
Zeig doch mal Code bitte.
-
senfile(2) - Manpage schrieb:
NOTES
[...]Presently the descriptor from which data is read cannot correspond to a
socket, it must correspond to a file which supports mmap()-like opera-
tions. [...]Das scheint wohl leider nicht zu gehen.