(erledigt) C libcurl STDOUT Ausgabe unterbinden, aber wie ?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ren22

(erledigt) C libcurl STDOUT Ausgabe unterbinden, aber wie ?

Beitrag von ren22 » 10.09.2019 02:17:25

Hallo,

eins vor weg, ich kann kein C/C++ programmieren, ...leider! Aber ein wenig in Bash, daher scheine ich auch in gewisser maßen C Code zuverstehen, zumindestens tuhe ich so :D

Ich versuche Mithilfe der libcurl in C und dem libcurl Beispiel url2file ein kleines Programm zuschreiben, was nur eine Datei herunterladen soll, wenn sie auf dem Server vorhanden ist, allerdings habe ich das Problem das die Ausgabe, wenn die Datei heruntergeladen wird auch nach STDOUT ausgegeben wird.Ich versuche jetzt schon seit Stunden(!!!), die Ausgabe von libcurl nach STDOUT zu unterbinden, aber irgend wie, egal was ich versuche, erhalte ich immer eine zusätzliche Ausgabe auf STDOUT. Kann mir bitte jemand weiterhelfen wie der Code lediglich die Datei von der URL herunterlädt ohne eine zusätzliche Ausgabe dabei auf STDOUT ??? Das wäre echt toll. :THX:

dazu der Code, den ich soweit zusammen kopiert habe:
url2file
Benutzung: ./url2file <URL>

Benutzung: ./url2file http://hgd-speedtest-1.tele2.net/1MB.zip
Wenn das herunterladen erfolgreich war, sollte sich eine Datei namens "page.out" im selben Verzeichnis befinden!

Vielen Dank.
Zuletzt geändert von ren22 am 10.09.2019 18:00:18, insgesamt 1-mal geändert.

reox
Beiträge: 2521
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: C libcurl STDOUT Ausgabe unterbinden, aber wie ?

Beitrag von reox » 10.09.2019 08:12:15

Mh ich kenn jetzt libcurl nicht wirklich, aber wenn du dir das Beispiel auf github anschaust, dann verwenden sie die callback funktion während du einen nullpointer übrgibst.
Vermutlich ist dann der default das es auf stdout geht.

https://curl.haxx.se/libcurl/c/CURLOPT_ ... CTION.html sagt allerdinsg was anderes
Set this option to NULL to get the internal default function used instead of your callback. The internal default function will write the data to the FILE * given with CURLOPT_WRITEDATA.
Hast du mal das Beispiel wie auf github ist probiert ob es da funktioniert?


edit: Ah, ich glaube dein Problem ist, du rufst zwei mal curl_easy_perform(curl_handle); auf! Du darfst nicht den Rückgabewert davon überprüfen und dann versuchen in die Datei zu schreiben, wenn ich das richtig verstehe.

ren22

Re: C libcurl STDOUT Ausgabe unterbinden, aber wie ?

Beitrag von ren22 » 10.09.2019 17:56:50

Hallo reox, mit dem NULL hatte ich auch probiert aber auch fail, ich habe jetzt von dem libcurl ftpget Beispiel den Code für die write_function übernommen, nun scheint es auch soweit zu funktionieren, dass ich nicht immer die gesamte Ausgabe auch zusätzlich auf STDOUT erhalte und curl_easy_perform(curl_handle) muss ich scheinbar 2x aufrufen da sonst nur ein check ausgeführt wird aber die Datei dann nicht geschrieben wird. man sieht es auch an der Ausgabe von libcurl

Code: Alles auswählen

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                          	 Dload  Upload   Total   Spent    Left  Speed
  1  850k    1 15715    0     0  74478      0  0:00:11 --:--:--  0:00:11 82710
100  850k  100  850k    0     0  6028k      0 --:--:-- --:--:-- --:--:-- 6028k
beim ersten sieht man : received 1% und 15715bytes und dann wahrscheinlich der zweite curl_easy_perform(curl_handle) 100% und 850k received.

Vielen Dank :THX:

Antworten