Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    37

    scambio valori tra demoni

    Ciao a tutti,avrei la necessità di realizzare il seguente progetto:
    devo creare in ambiente linux un programma che legge dati da un gps seriale in modo automatico (avevo pensato ad un demone) e un altro demone che sfrutta i dati ricevuti e codificati dal gps.
    Avevo pensato di realizzare un programma che si avvia all'accensione del sistema e crea i due demoni che continuano a lavorare finchè non spengo il tutto.Il problema (oltre a quello di creare demoni etc che in qualche modo risolverò...si spera) è quello di come faccio a scambiare dati tra i due demoni,ossia ad esempio:come faccio a far sapere la posizione dell'auto al secondo demone??Tutti i consigli sono ben accetti!!

  2. #2
    Io userei le pipe o le socket di tipo AF_UNIX (named pipe) o normali socket TCP o UDP.
    Per scegliere terrei conto di alcuni fattori:
    - se voglio poi portare il tutto sotto Windows eviterei del tutto le pipe
    - vedrei se necessito di comunicazioni uni o bidirezionale, se è uni userei l'UDP (ma terrei conto delle eventuali perdite di pacchetti)
    - valuterei la possibilità di scambiare i dati del GPS anche a macchine remote e quindi userei TCP o UDP


  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    37
    il sistema deve funzionare solo sotto linux,e la comunicazione tra i due demoni deve essere unidirezionale.

  4. #4
    Allora la strada più semplice credo sia una una named pipe se i due demoni partono in momenti diversi da due processi separati...se invece c'è un demone di gestione che li fa partire entrambi puoi usare una pipe.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    37
    Ciao,approfitto della tua grande disponibilita per chiederti un'altra cosa:
    come faccio a far partitre un programma realizzato in c esrova.c in automatico,ossia voglio che giri in background e che termini alla chiusura del sistema.
    Ho letto che bisogna aggiungere uno script a /etc/init.d.....ma sinceramente non mi è chiaro.Sai dove posso trovare qualche esempio anche banale??ciao e grazie ancora per la tua disponibilità!

  6. #6
    Sei sulla strada giusta....quello che devi fare è cercare della documentazione sui runlevel del sistema. In soldoni quando il sistema parte viene avviato un processo, init, che fra le altre cose carica degli script di avvio presenti nella directory /etc/rc<runlevel> (in realtà sono dei link simbolici a degli script in /etc/init.d. Se supponiamo che il sistema parta con interfaccia grafica, allora dovrebbe essere in runlevel 5 (comunque nel file /ect/inittab la prima riga utile dovrebbe essere il runlevel di defaul), e quindi ciò che viene fatto partire lo trovi in /etc/rc5.d. I link che iniziano con Sxx dove xx è un numero sono i servizi avviati quando il runlevel parte, quelli con Kxx sono quelli interrotti; xx indica quando il servizio parte rispetto agli altri, es 01 parte prima di 99 e viene usato per eventuali dipendenze;
    Nel tuo caso credo tu debba fare queste cose:
    - creare in /etc/init.d un file di script che accetta un parametro tra start, stop, status e che avvia, termina e dice se il tuo servizio è o no attivo (guardati uno degli script presenti e modificalo di conseguenza); chiamalo miogps;
    - creare in /etc/rc5.d un link simbolico al tuo script e chiamalo (il link) S99miogps;
    a questo punto se riavvii il sistema il tuo servizio dovrebbe partire.
    Ovviamente la faccenda è un poco pià complessa...ancora cerca della documentazione sul processo di init e sui runlevel. Cerca ad esempio il testo "appunti di informatica libera" che dovresti trovare con google...dovrebbe dire qualcosa a riguardo.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    37
    adesso provo il tutto!!Comunque grazie di nuovo per la spiegazione chiara ed efficacie!

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    37
    ciao,ho provamato ma sto impazzendo!!! Ho creato,per prova, un semplice programma che ho chiamato "maso" che, avviato da shell,stampa su un file 1000 numeri.Volendolo farlo avviare in automatico ho creato in /etc/init.d uno script di nome maso cosi fattocopiato da appunti di informatica libera)

    #!/bin/sh
    #
    # init.d/maso {start|stop|restart}
    #
    #Analisi argomento usato nella chiamata
    case "$1" in
    start)
    echo -n "avvio del servizio maso"
    /root/Desktop/prove varie/maso &
    echo
    ;;
    stop)
    echo -n "disattivazione servizio maso"
    killall maso
    echo
    ;;
    restart)
    killall -HUP maso
    ;;
    *)
    echo "uso: maso {start|stop|restart}"
    exit 1
    esac
    exit 0


    poi in /etc/rc5.d ho creato il link S99maso e ho riavviato...ma il nulla e mi sono venuti un sacco di dubbi:

    1)l'eseguibile maso dove lo devo salvare in qualche posto in particolare ho va bene qualunque cartella tanto poi lo trova con :
    echo -n "avvio del servizio maso"
    /root/Desktop/prove varie/maso &
    echo????????????????????????

    2)il programma crea il file con la stampa di 1000 numeri prima che io faccia il log in?
    3)quando creo il link S99maso se gia esiste un processo con numero 99 c'è qualche problema?

    Aiuto!!!!!!


  9. #9
    Per provare lo script invece che riavviare ti consiglio di richiamarlo direttamente con /etc/init.d/maso start...se va almeno ti togli un primo dubbio.
    Sicuramente se lo scopo del programma è di scrivere a video dubito molto che tu riesca a vedere qualcosa. Prova a redirigere l'output su file così puoi vedere se al riavvio il file esiste e contiene quello che ti aspetti (ti consiglio di stampare l'ora corrente così non ti confondi)
    Sicuramente non ci sono problemi con il 99....ci possono essere quanti script vuoi con lo stesso numero...a patto che il nome del servizio sia diverso
    Infine far partire il programma con & può essere una soluzione temporanea (se va) ma sicuramente ti dovrai scrivere un demone che si stacca dal terminale di controllo.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    37
    Finalmente qualcosa funziona!Grazie al tuo aiuto il programmino è partito da solo!!Non capisco perchè mi stampa il risultato sulla cartella "file:/ "e non sulla cartella sul desktop in cui è contenuto l'eseguibile maso.

    Cosa significa :...il programma con & può essere una soluzione temporanea (se va) ma sicuramente ti dovrai scrivere un demone che si stacca dal terminale di controllo.
    ??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.