Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] - fork() e execl(...) passare dei parametri

    Salve a tutti,
    vi chiedo nuovamente un aiuto per risolvere un problemino che sto avendo in un esercitazione in C; dovrei avere un processo che legga in continuazione i dati da una shared memory e per ogni lettura andata a buon fine deve creare un processo che utilizzi questi dati per svolgere altro codice.
    Io pensavo di fare una cosa del genere:


    while (1)
    {
    leggi DATI da shmat(....);
    salva lettura in un buffer;
    shmdt(...);
    se il buffer é ok allora fork()
    if (!fork()) execl(¨./programma¨,....);
    ....
    }
    ...
    ...
    Potrebbe essere un'impostazione corretta? Quello che non mi é chiaro é se posso passare il buffer letto al ./programma poiché voglio che l'accesso alla memoria condivisa sia solo del primo programma col ciclo while. Da quanto ho capito execl sostituisce il codice copiato dalla fork con il proprio path di esecuzione perdendo peró le variabili in uso é so ke si possono passare dei parametri dopo il path di esecuzione ma non so se possa fare al caso mio e se posso passarvi quello ke mi par).
    Qualcuno mi potrebbe dare un chiarimento?
    Grazie

    Fabio

  2. #2
    exec.. è una famiglia di funzioni ognuna delle quali si comporta differentemente per quanto riguarda il modo di passaggio delle variabili e il grado di sicurezza. Le variabili le puoi passare attraverso le variabili di ambiente o attraverso i parametri di linea di comando, come preferisci a seconda della funzione che scegli.
    Con la exec.. il controllo passa al processo del programma indicato nella exec stessa ed il processo in corso termina.
    ciao
    sergio

  3. #3
    grazie per la risposta....ora ho gia' meno dubbi.....!!!
    stando alle specifiche della exec la execl farebbe al caso mio, optando quindi per una serie di parametri da linea di comando; il problema e' che forse questo sistema non sarebbe troppo sicuro in quanto si potrebbe (presumo) lanciare il porgramma della execl separatamente con altri parametri volutamente introdotti da terzi, giusto? Se cosi' fosse si puo' fare qualcosa per una maggior sicurezza....che ne so, passare i parametri (in questo caso argv[] con una funzione di hash o qualcosa di simile)?

    Grazie ancora

  4. #4
    Ad abbassare il livello di sicurezza delle funzioni exec è il fatto che queste funzioni passano le informazioni sulle variabili di ambiente in uso ad un altro processo.
    Solo le funzioni execle, execve e fexecve sono considerate sicure, sempre che vengano chiamate fornendo un percorso sicuro al file eseguibile.
    E' buona norma, infine, non usare una funzione exec con un programma che abbia il bit setuid settato.
    ciao
    sergio

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.