Journal Timer

Posté par  .
Étiquettes : aucune
0
12
mar.
2004
Cher journal privé,

Je souhaite réaliser un ptit programme en C censé acceder a une page web a interval régulier (jlavais déjà fais, mais pas en C...)

je m'explique :
Mon serveur ftp tourne en permanence, mais son ip change toutes les 24h, donc quand je suis pas chez moi, je peux me connecter a une page personnelle via le web qui indique ma derniere IP attribuée, elle raffraichie l'info toutes les 10 minutes.
J'ai plus qu'a me connecter sur mon serveur ftp pour récuperer mes données.

La page personnelle existe déjà, c'est les vestiges de mon ancien programme qui marchait bien avant que je passe sous linux

Donc le code doit etre un truc tout bete, genre :

int main()
{
while (1)
{
system("lynx lynx -accept_all_cookies http://mapageperso.com(...)");
sleep(600);
}
}

Ca marche, mais très mal.

Il faudrait en effet que je trouve une astuce pour que lynx se ferme tout seul après qu'il se soit connecté a la page, sinon il bloque la boucle.

De plus, j'aurai aimé un timer, j'ai regardé sur le net, mais timer_create semble marcher avec un systeme de signaux propres a unix, et j'avoue que j'y connais pas grand chose... :-\


Donc si quelqu'un a pigé mon probleme, et qu'il veut bien m'aider...
Ou si quelqu'un n'a pa compris mon probleme, mais sait malgrès tout comment on fait un timer qui par exemple dit "hello wordl" toutes les 5 min que je comprenne le principe (sans utiliser ma technique du while hein, c'est pour les crados ca..)

Bref..
Merci d'avance.
  • # Re: Timer

    Posté par  . Évalué à -5.

    oops désolé j'ai laissé le journal en public...

    Vous pouvez me moinsser pour la peine...
  • # Re: Timer

    Posté par  (site Web personnel) . Évalué à 9.

    tu t'inscris chez dyndns.org (gratuit), et tu te choisis une adresse pour ta machine genre mamachine.homeip.org (y'a pas mal de possibilité pour le choix), tu aura donc un compte chez dyndns après inscription (login + pass),
    ensuite tu télécharge un programme genre ddclient (apt-get install ddclient), tu le configure et il s'install sous la forme d'un démon qui à intervalle régulier (que tu choisis) envoie ton ip au serveur dyndns pour que le lien mamachine.homeip.org <-> ton ip soit tjs effectif....

    au final d'ou que tu sois : t'accède à ta machine par son nom : mamachine.homeip.org

    en gros ça fait la même chose que ce que tu souhaite faire mais en mieux....;

    j'espère avaoir été clair....

    M.
    • [^] # Re: Timer

      Posté par  . Évalué à 3.

      Bah en fait c'est kifkif comme mon systeme.

      Sur ma page perso, l'adresse est http://mapage.fr.st(...)
      Ca redirige automatiquement sur la derniere IP reçue.

      La seul différence, c'est que toi tu m'a filé un programme tout fait pour envoyer l'adresse IP, alors que c'est précisement ce point que je voulais réaliser par mes soins (en fait je veux limiter au maximum la dépendance avec un quelquonque logiciel ou hebergeur, ma page web fait quelques lignes de code, donc ca va pas chercher bien loin si jdois la déplacer autre part quand l'hebergeur fermera)

      Mais sinon merci quand meme.
    • [^] # Re: Timer

      Posté par  . Évalué à 1.

      oui c'est clairement beaucoup plus simple !
  • # Re: Timer

    Posté par  . Évalué à 3.

    "lynx -dump" devrait suffire
    • [^] # Re: Timer

      Posté par  . Évalué à 3.

      un wget --output-document=/tmp/tmp.html sinon
    • [^] # Re: Timer

      Posté par  . Évalué à 2.

      C'est bon ca marche !

      J'ai fait un lynx --dump et j'ai redirigé ca vers /dev/null car j'en ai pas besoin, mon ptit daemon est fin prêt :-)

      Merci beaucoup !

      Mais pour la culture générale, quelqu'un pourrait m'expliquer via quelques lignes de code comment faire un timer en C qui dit "hello" toutes les 2 minutes par exemple ? (un vrai timer, avec la fonction timer_create que je puisse voir enfin comment ca marche..)
  • # Re: Timer

    Posté par  (site Web personnel) . Évalué à 9.

    Deja, tu ferais mieux d'utiliser cron pour ca.
    Ensuite, personellement j'utilise un lynx -dump dans /etc/ppp/ip-up , pas besoin de cron et ca marche tres bien :)
  • # Re: Timer

    Posté par  (site Web personnel) . Évalué à 1.

    moi j avais elabore un repertoire de scripts qiu fesaient ca:
    - apel via crontab toutes les heures
    - cherchage de l ip courante
    - construction d un fichier de sequence de touches pour lynx
    - apel de lynx avec le fichier precedement construi
    - attente 1 minute, le temps que lynx navigue ( avec des authentifications SSL dans le tas )
    - tuage de lynx a la barrebarre parceque j avais recupere son ip avec la var d env $! IIRC

    donc c etait un gros melange de crontab, shel, C, lynx et peut etre d autres que j avais oublie, ca plantait une fois sur deux parceque comme le site auquel lynx accedait changeait des fois, il y avait pas tj le bon nombre de "fleche vers le bas"

    si ton pb se limite a lancer une tache toutes les 5 minutes:
    - crontab -e
    - man 3 sleep

    mais si tu n as pas comme moi besoin d acceder a une page en SSL avec navigation complexe, peut etre que tu trouvera une librairie C qui permet d ouvrire des URL ... sinon tu peut ecrire des bouts en php3 , sachant que un script php3 peut etre execute en dehors d un server web, tout comme un script PERL ou BASH ... mais pour ca il faut l interpreteur qui se trouve dans le pakage (debian) php3-cgi ou php4-cgi
    • [^] # Re: Timer

      Posté par  . Évalué à 2.

      Probleme (presque) résolu, voir plus haut.

      Mais tes méthodes bien dégeulasses me rappele etrangement les miennes... hum t'aurai pas fait un bts info toi ? lol
      • [^] # Re: Timer

        Posté par  (site Web personnel) . Évalué à 1.

        pire: une ecole d info ... enfin une ecole qui se dit ecole d info ... mais pour resoudre le pb du https et "naviguer" dans les pages, remplire des champs de formulaires, je n ai pas trouve plus pratique que lynx ...
        • [^] # Re: Timer

          Posté par  . Évalué à 1.

          Ouai moi aussi mon ecole d'info elle laisse a désirer...
          Mais l'an prochain si tout se passe bien jme casse de là, jvais faire un truc en alternance sur 2 ans, une ecole de la chambre de commerce du val d'oise.

          bref..
          • [^] # Re: Timer

            Posté par  . Évalué à 1.

            Euh jpeux savoir pourquoi on m'a moinsser là au dessus ?

            Si j'peux meme plus discuter dans mon propre journal ou va le monde ?

            Bande de saumon moinsseurs (allez moinssez encore jviens de vous traiter de saumon (hannnnn))
  • # Re: Timer

    Posté par  (site Web personnel) . Évalué à 2.

    Je te conseille de faire une boucle while pour t'assurer que le sleep ne sort pas avant le temps souhaité (sur reception de signaux ou que sais je):

    int sleeping_time = 600;
    while ((sleeping_time = sleep(sleeping_time)));

    Plus de détails dans la manpage "man 3 sleep"

    Peut etre est il aussi utile pour toi de voir du coté de errno pour ne boucler que dans certains cas (type EINTR)
  • # CURL

    Posté par  . Évalué à 2.

    Je vois pas vraiment l'interret de faire du C là où un script shell + cronttab font l'affaire avec beaucoup moins de tracas en perspective.

    Sinon, je te conseille la lecture de "The Art Of Scripting HTTP Requests Using Curl" http://curl.haxx.se/docs/httpscripting.html(...) . Curl est vraiment pas mal pour faire ce genre de chose, en plus y a une biblio avec une api C assez simple si tu tiens vraiment à coder du C.
    • [^] # Re: CURL

      Posté par  . Évalué à 1.

      Je vois pas vraiment l'interret de faire du C là où un script shell

      L'interet c'est précisément d'etre dépendant du minimum de chose, le script shell sous windows par exemple c'est mort, déjà là ya lynx qui fait chier en cas de portage, mais bon j'men accomoderai

      J'ai une formation très orientée developpement, et je préfère utiliser de vrai langages évolués, car mine de rien le shell c'est très bien, mais un jeu en open3D avec le shell c'est un peu plus dur.

      Donc désolé d'aller a contre courrant et de ne pas choisir la facilité comme tout le monde (bouh vilain petit saumon)
      • [^] # Re: CURL

        Posté par  . Évalué à 3.

        De vrai langage évolué, le C, énorme..
        Non, sérieux, si tu as une bonne formation développement, on doit te dire que si il y a pleins de langages, c'est que chacun a son utilité ( même le fortran ).

        Sache que la fonction C 'system' lance présicément un shell, avec un fork() et un waitpid().
        C'est très violent.

        Sache aussi que le langage de script python a des binding OpenGL (et pas Open3D!), et ca marche très bien pour faire des petites applis.

        Si tu as besoin de faire du script, c'est bash ou perl ( les 2 sont parfaitement portables, et existent sous quasiment toutes les plateformes ( même sur atari..)
      • [^] # Re: CURL

        Posté par  . Évalué à 1.

        > J'ai une formation très orientée developpement, et je préfère utiliser de vrai langages évolués, car mine de rien le shell c'est très bien, mais un jeu en open3D avec le shell c'est un peu plus dur.

        epitech ?

        (ta maitrise du vrai langage evolué que tu as appris dans ton ecole est impressionante d'ailleur et tu as raison a ne pas t'interesser a ce sous langage qu'est le shell tout juste bon pour appeler ps et cd :-)
        • [^] # Re: CURL

          Posté par  . Évalué à -1.

          Bordel mais vous le faites expres !

          Bon je vais essayer de rester calme, mais mince ya pas que linux et unix dans la vie.

          Le shell c'est très bien, ok, je ne crache pas dessus.

          MAIS MERDE JE PREFERE LES LANGAGES EVOLUES !

          raaahhhh je déséspere....

          Des trucs comme le c++, le java, le delphi meme pourquoi pas.

          Enfin mince, je parle de gout et de couleur là, le shell ya quand meme une connotation batch très prononcée non ??

          Moi je préfère des fonctions, des pointeurs, des structures, et pour répondre au gars qui précédemment m'a dit que le C n'est pour lui pas évolué, bah jlui rappelle quand meme, que unix n'a pas été fait en shell, mais en C.

          Et pis si jpréfère programme en C ou autre chose plutot qu'en shell ca me regare un minimum non ?

          Et pis d'ailleur : ta maitrise du vrai langage evolué que tu as appris dans ton ecole est impressionante d'ailleur et tu as raison a ne pas t'interesser a ce sous langage qu'est le shell tout juste bon pour appeler ps et cd :-)

          Ou ai-je dis que le shell etait un sous langage ? j'ai juste dis que le C etait plus performant, et arreter un peu le chauvinisme shellien, le shell c'est moins rapide que le C c'est un fait

          De plus ou ai je dis que je maitrisai le C ? je ne pense pas m'etre vanté de quoi que ce soit. Au contraire le sujet de ce journal est comment faire un timer... il est donc evident que j'suis pas doué dans ce langage, car il est vrai que j'ai l'habitude de travailler avec d'autres.

          Ensuite épitech je sais pas ce que ca vient foutre là, mais quoiqu'il en soit, vu ce que je pense d'épita (voir un de mes commentaires sur un journal sur les ecole d'ingé vu précédement), bah épitech c'est du pareil au meme...

          Bref, toute facon, ca change pas de d'habitude, yen aura toujours pour raler, pour croire qu'on attaque leur bon vieux shell adoré, alors que j'en ai strictement rien a foutre je veux juste faire un timer en C.

          Bref
          • [^] # Re: CURL

            Posté par  . Évalué à 1.

            >MAIS MERDE JE PREFERE LES LANGAGES EVOLUES !

            Bin justement, le shell est un langage trés evolué, trop d'ailleurs pour faire certaines applications (un OS par exemple). Le C est un langage évolué par rapport à l'asm, mais suggérer que le C est plus évolué que le shell, c'est etre un abruti (aie ... zut, je voulais vraiment répondre calmement au monsieur).

            Par contre je suis d'accord avec eux, pourquoi le faire en C alors que le shell est justement fait pour cela.
            Et puis tant qu'a utiliser un langage evolue comme le C, pourquoi tu ouvres pas un socket et tu lui envoies pas une requette http? Car faire un prog en C pour appeler Lynx, c'est comment dire ... nul (au vu de ce que tu souhaites réaliser).
            • [^] # Re: CURL

              Posté par  . Évalué à 0.

              je sais pertinemment que system() c'est nul, mais tu me dis que je devrai utiliser les sockets alors que je suis déjà là en train de demander comment faire un timer !

              Chaque chose en son temps, j'ai précisé bien plus haut que l'usage de lynx etait le dernier point problématique.
              • [^] # Re: CURL

                Posté par  . Évalué à 2.

                > .... utiliser les sockets alors que je suis déjà là en train de demander comment faire un timer !
                > ... Chaque chose en son temps, ...

                A car tu compte utiliser reelement des sockets pour ca?
                Franchement, un coup d'asm (langage encore plus évolué) et tu attaque la carte réseaux direct pour envoyer la bonne séquence de bit au serveur http ...


                sinon , d'un de tes post plus haut:

                >J'ai une formation très orientée developpement ...

                Tu sait pas faire de timer, ni de socket, tu dit que le C est un langage évolué par rapport au shell, tu va reinventer la roue en faisant un demon pour periodiquement mettre un truc a jour ....
                rassure moi, tu en est au début de la "formation" non?
                • [^] # Re: CURL

                  Posté par  . Évalué à 1.

                  Non mais j'ai commencé le C, car je n'en avais jamais fait avant.
              • [^] # Re: CURL

                Posté par  . Évalué à 1.

                Bon ben comme t'as l'air convaincu, je te conseille vivement d'utiliser la libcurl que je t'ai pointé dans mon premier post. C'est assez simple, y a des tas d'exemple fournis avec. À moins que tu veuilles aussi réécrire tout un client http en C...
          • [^] # Re: CURL

            Posté par  . Évalué à 2.

            > Bordel mais vous le faites expres !

            un peu oui

            > MAIS MERDE JE PREFERE LES LANGAGES EVOLUES !

            Le C un langage evolué pour faire du scripting ? Fait gaffe quand meme toutes les conneries que tu dis ici sont archivés par google.

            > Enfin mince, je parle de gout et de couleur là, le shell ya quand meme une connotation batch très prononcée non ??

            je serais toi je ferais un man zshall pour voir tout ce qu'on peut faire en sh. Enfin tu as mauvais gout cela est pardonable, mais expliquer que tu preferes le C et faire un system("lynx ") c'est ridicule.

            > j'ai juste dis que le C etait plus performant, et arreter un peu le chauvinisme shellien, le shell c'est moins rapide que le C c'est un fait

            J'avoue que le shell en beaucoup plus long et consome beaucoup plus de CPU pour faire un sleep(3600). Tu as entierement raison de vouloir optimiser une telle tache qui pourrait mettre KO ta machine.

            > Au contraire le sujet de ce journal est comment faire un timer...

            A coup de sleep, voir aussi man 2 setitimer avec ITIMER_REAL.

            Enfin bref; revise quand meme ton livret des choix technologiques ca pourrait t'etre utile dans la vie :-)

            Et pour l'independence de la plateforme laisse moi rire ton prog fait deux choses : un sleep (posix donc hautement portable tu as raison) et un system("lynx ") alors la y'a pas a dire dans le portable et independent de la plateforme je pense que l'on fait pas mieux ! Si tu veux etre independent tu vais du vrai C avec des vrais sockets la ton script ira 42 x plus vite qu'en sh et sera 72 fois plus portable.

            Vouloir apprendre a le faire en C c'est OK, sortir des raisons aussi nulles que celles la je me poserai des questions.
  • # Re: Timer

    Posté par  . Évalué à 4.

    1. s'inscrire à dyndns
    2. dans /etc/ppp/ip-upd.d, mettre un script qui va mettre à jour la base dyndns (ipcheck, par exemple)

    C'est pas la peine de mettre à jour toutes les dix minutes une ip qui ne change que quand on se reconnecte!
    • [^] # Re: Timer

      Posté par  . Évalué à 2.

      Solution déjà proposée précédemment, et amicalement déclinée pour les raisons sus-citées.

      Mon IP change toutes les 24h de facon invariable (routeur)

      Mais supposons que je sois a mon bahut, j'ai absolument besoin d'un fichier, et bah je serai content d'avoir l'ip de mon poste a jour, ou au pire d'attendre 10min que ca raffraichisse la nouvelle IP.

      Jme vois pas dire : ah bah attendez, si ca se trouve l'ip vient de changer, on va ptetre devoir attendre 1 heure que la nouvelle IP nous soit communiquée...

      bref.
      • [^] # Re: Timer

        Posté par  (site Web personnel) . Évalué à 1.

        ou au pire d'attendre 10min

        ben justement avec dyndns t'attends pas 10 min, c'est mis à jour dès que ça reconnecte. Et t'as pas besoin de passer par une page web pour récupérer l'IP.
      • [^] # Re: Timer

        Posté par  . Évalué à 1.

        Mais non..
        Le script ip-up est appelé par ppp *pile-poil* quand tu change d'IP.

        Donc *instantanément*, ça met à jour le serveur dns. Pas besoin d'attendre 10 mins.
        Et en plus, ça marche aussi pour te connecter à ton ordi via ssh ou ftp ou cvs, etc.
      • [^] # Re: Timer

        Posté par  . Évalué à 1.

        L'apport de ma proposition, c'est le placement dans /etc/ppp/ip-up.d, qui comme le fait remarquer quelqu'un plus bas, change l'ip uniquement quand elle change, et pas 150 fois par jour!
  • # Réponse à la con

    Posté par  . Évalué à 1.

    Devans les propos étonnant dans les commentaires de la part de l'auteur du journal, je ne peux m'empecher de lui répondre :

    ABONNES TOI A UN VRAI FAI QUI TE FOURNI DES VRAIS IP FIXE BORDEL DE MERDE !

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.