Etwas in Konsole einschreiben?



  • Ich würde gerne ein deamon Programmieren der eine Textdatei per ftp jede zb 3 min schickt. da ich keine ahnung von socketprogamierung habe will ich einen externen ftp-client benutzen, zb ftp das problem ist wenn man das problem aufruft kommt dann:

    xxx dcmaster # ftp
    ftp>

    jetzt mit der system() methode kann ich ja nur ftp starten, aber wie kann ich nachdem ich es gestartet habe d.h. wenn ftp> noch etwas eingeben? Z.B. open ftp.meinftp.com
    Währe euch sehr dankbar!



  • Das beste wird sein, Du verwendest entweder libcurl, oder Du scriptest einfach schnell was passendes mit expect zusammen, oder (achtung, richtig gute Idee folgt) Du verwendest einfach was ganz cleveres:

    • lftp installieren
    • Das untenstehende Skript irgendwo speichern.
    • Via Cron regelmäßig "lftp -f /pfad/zum/lftp/skript" ausführen lassen.
    open -u user,passwort url_des_ftp_servers
    put -O "zielpfad" hochzuladende_datei
    get -O "zielpfad" herunterzuladende_datei
    quit
    

    Siehe dazu auch LFTP-Doku/Scripts und man: crontab(5).



  • danke für deine Antwort, habe ein bisschen nochmals gesucht und folgendes gesehn:

    Programm...
    system("(echo open meinftp && echo get meinedatei)|ftp");
    Programm...
    

    das ist auch das was ich gesucht habe...
    greetz



  • dcmaster schrieb:

    danke für deine Antwort, habe ein bisschen nochmals gesucht und folgendes gesehn:

    Programm...
    system("(echo open meinftp && echo get meinedatei)|ftp");
    Programm...
    

    das ist auch das was ich gesucht habe...

    das ist glaube ich der schlechteste Weg das Problem zu lösen.



  • Wenn du schon unbedingt das FTP Programm fernsteuern musst, dann mach das doch mit popen(). Dann kannst du einfach mit fwrite in das Programm reinschreiben.



  • ProgChild schrieb:

    Wenn du schon unbedingt das FTP Programm fernsteuern musst, dann mach das doch mit popen(). Dann kannst du einfach mit fwrite in das Programm reinschreiben.

    Diese Idee ist die die mir am besten gefällt... aber jetzt habe ich ein problem ich kann mich nicht einloggen... Habe zum test sowas geschrieben:

    #include <iostream>
    #include <cstdlib>
    #include <string>
    #include <cmath>
    #include <fstream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    string sendchatmsg;
    string receivechatmsg;
    fstream chatlog;
    string command;
    
    FILE *ftp = popen("ftp","w");
    
    fwrite("open 128.100.1.32",1,18,ftp);
    fwrite("anonymous",1,18,ftp);
    fwrite(" ",1,18,ftp);
    fwrite("cd doc",1,18,ftp);
    fwrite("get eta.Z",1,18,ftp);
    pclose(ftp);
    return 0;
    }
    

    kann mir da jemand helfen?



  • nimm fputs statt fwrite oder sieh nach, was die parameter bei fwrite bedeuten.



  • Gut hab es mit fputs probiert, das problem ist dass man das password nicht automatisch eingeben kann hier den code:

    #include <iostream>
    #include <cstdlib>
    #include <string>
    #include <cmath>
    #include <fstream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    
    FILE *ftp = popen("ftp","w");
    
    fputs("open 128.100.1.32\n",ftp);
    fputs("anonymous\n",ftp);
    cout << "test.." << endl;
    sleep(5);
    fputs(" \n",ftp);
    fputs("cd doc\n",ftp);
    fputs("get eta.Z\n",ftp);
    pclose(ftp);
    return 0;
    }
    

    wenn ich diesen code starte kommt es bis Password: wenn man dort dann einfach "enter" (da für anonymous kein pw nötig ist) eingibt dann führt er den rest richtig aus:

    dcmaster@localhost ~/programming $ ./test
    test..
    Name (128.100.1.32:dcmaster): Please login with USER and PASS.
    SSL not available
    Password:
    

    Hat da jemand eine lösung?


Log in to reply