[Coding] Output processo in altro terminale
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Pag 1 di 2 12 UltimoUltimo
Visualizzazione risultati da 1 a 15 di 16

Discussione: Output processo in altro terminale

Cambio titolo
  1. #1
    Utente
    Registrato il
    01-06
    Messaggi
    9.639

    Output processo in altro terminale

    Ciao a tutti, sto scrivendo un' applicazione in c in cui vengono creati tramite fork altri processi che a loro volta creano dei thread. Mi servirebbe mandare l'output di un processo su un altro terminale. Avete qualche suggerimento? Non lancio separatamente gli eseguibili dei processi quindi non ho proprio modo di forzarli tramite > su file o terminale diverso.

  2. #2
    Utente
    Registrato il
    02-06
    Località
    ...
    Messaggi
    4.972
    E' abbastanza complicato.
    In generale quando profuci output su un terminale stai in realtà scrivendo su un descrittore di un file particolare.
    Dovresti trovare il descritto del file del terminale e scriverci sopra.

    Qui c'e qualche funzione ausiliaria che ti aiuta nel fare questo.
    http://www.gnu.org/software/libc/man...-It-a-Terminal

  3. #3
    01010112010110 L'avatar di [-Xna-]
    Registrato il
    07-06
    Località
    X - Universe
    Messaggi
    1.957
    Non puoi scrivere su dei file e poi leggerli in seguito come una sorta di log?
    Good things don't come to an end: good things just stop. ~ Day[9]

  4. #4
    Utente
    Registrato il
    01-06
    Messaggi
    9.639
    Citazione CorralX Visualizza Messaggio
    E' abbastanza complicato.
    In generale quando profuci output su un terminale stai in realtà scrivendo su un descrittore di un file particolare.
    Dovresti trovare il descritto del file del terminale e scriverci sopra.

    Qui c'e qualche funzione ausiliaria che ti aiuta nel fare questo.
    http://www.gnu.org/software/libc/man...-It-a-Terminal
    ok,provo a guardare se riesco a cavarne qualcosa di utile.Grazie.

    Citazione [-Xna-] Visualizza Messaggio
    Non puoi scrivere su dei file e poi leggerli in seguito come una sorta di log?
    Il problema è che non avvio separatamente i processi,ma avvio un processo che ne crea altri 3 e faccio delle execlp,inoltre 2 processi hanno sostanzialmente lo stesso codice(svolgono il ruolo di consumatori di tipo diverso),quindi le stampe a video rischiano di confondersi.

  5. #5
    panzone
    Ospite
    Citazione Xerox Visualizza Messaggio
    Ciao a tutti, sto scrivendo un' applicazione in c in cui vengono creati tramite fork altri processi che a loro volta creano dei thread. Mi servirebbe mandare l'output di un processo su un altro terminale. Avete qualche suggerimento? Non lancio separatamente gli eseguibili dei processi quindi non ho proprio modo di forzarli tramite > su file o terminale diverso.
    Come detto da corralx, quando stampi su terminale in realtà non fai altro che stampare su un file speciale. Cambia il file speciale del fork in modo da redigere stdout altrove per quel processo (tipo in C con freopen) -> ora stampi automaticamente sull' altro descrittore -> profit

  6. #6
    Utente
    Registrato il
    01-06
    Messaggi
    9.639
    Citazione panzone Visualizza Messaggio
    Come detto da corralx, quando stampi su terminale in realtà non fai altro che stampare su un file speciale. Cambia il file speciale del fork in modo da redigere stdout altrove per quel processo (tipo in C con freopen) -> ora stampi automaticamente sull' altro descrittore -> profit
    Ottimo,così volendo sarebbe semplicissimo redirigire l'output in un file di testo. Il problema è trovare il descrittore del nuovo terminale aperto(supponendo di aprirlo con una system), le funzioni che ho visto nel link passato che ho corralx isatty e ttyname non fanno altro che vedere se il descrittore passato è associato al processo. C'è qualche funzione di supporto,magari che lavori sul path /dev/tty o insomma su qualcosa da cui ci si possa ragionare?

  7. #7
    da 3? L'avatar di Celebron
    Registrato il
    07-06
    Località
    Sotto Canestro
    Messaggi
    14.462
    Citazione Xerox Visualizza Messaggio
    Ottimo,così volendo sarebbe semplicissimo redirigire l'output in un file di testo. Il problema è trovare il descrittore del nuovo terminale aperto(supponendo di aprirlo con una system), le funzioni che ho visto nel link passato che ho corralx isatty e ttyname non fanno altro che vedere se il descrittore passato è associato al processo. C'è qualche funzione di supporto,magari che lavori sul path /dev/tty o insomma su qualcosa da cui ci si possa ragionare?
    Ma scusa non fai prima a ridirezionare su un "file standard" e poi leggere quei file su terminali diversi tramite tailf (o quel ti piace di più)?

  8. #8
    Utente
    Registrato il
    01-06
    Messaggi
    9.639
    Citazione Celebron Visualizza Messaggio
    Ma scusa non fai prima a ridirezionare su un "file standard" e poi leggere quei file su terminali diversi tramite tailf (o quel ti piace di più)?
    Si, effettivamente se la soluzione è troppo complicata farò così. Il fatto è che l'applicazione dovrebbe continuare sempre a girare,non dovrebbe terminare se non forzatamente.Sarebbe mooolto più comodo.

  9. #9
    panzone
    Ospite
    Citazione Xerox Visualizza Messaggio
    Si, effettivamente se la soluzione è troppo complicata farò così. Il fatto è che l'applicazione dovrebbe continuare sempre a girare,non dovrebbe terminare se non forzatamente.Sarebbe mooolto più comodo.
    Scrivere un banalissimo programma echo che apre una socket locale o, leggermente più complesso, usare la shared memory ? Così lo apri su un nuovo terminale, il fork invia i dati al programma, questo stampa, tutti felici.

    Il fatto è che non puoi accedere al descrittore di un' altra istanza della shell per tutta una serie di motivi.

  10. #10
    Utente
    Registrato il
    01-06
    Messaggi
    9.639
    Citazione panzone Visualizza Messaggio
    Scrivere un banalissimo programma echo che apre una socket locale o, leggermente più complesso, usare la shared memory ? Così lo apri su un nuovo terminale, il fork invia i dati al programma, questo stampa, tutti felici.

    Il fatto è che non puoi accedere al descrittore di un' altra istanza della shell per tutta una serie di motivi.
    Cioè dici di usare un processo diverso, di inviare via IPC e far stampare a questo processo . Non è male come idea, ci penso se mi conviene veramente o se mi può bastare fare una freopen su un file di testo.

  11. #11
    Utente
    Registrato il
    02-06
    Località
    ...
    Messaggi
    4.972
    Citazione Xerox Visualizza Messaggio
    Ottimo,così volendo sarebbe semplicissimo redirigire l'output in un file di testo. Il problema è trovare il descrittore del nuovo terminale aperto(supponendo di aprirlo con una system), le funzioni che ho visto nel link passato che ho corralx isatty e ttyname non fanno altro che vedere se il descrittore passato è associato al processo. C'è qualche funzione di supporto,magari che lavori sul path /dev/tty o insomma su qualcosa da cui ci si possa ragionare?
    Puoi usare ctermid per chiedere il path del terminale attualmente associato al processo.
    http://man7.org/linux/man-pages/man3/ctermid.3.html

  12. #12
    Utente
    Registrato il
    01-06
    Messaggi
    9.639
    Citazione CorralX Visualizza Messaggio
    Puoi usare ctermid per chiedere il path del terminale attualmente associato al processo.
    http://man7.org/linux/man-pages/man3/ctermid.3.html
    In questo caso dovrei avviare un processo da un altro terminale,usare la ctermid,inviare il path al processo che voglio che stampi sul nuovo terminale e fare un freopen con il path. È corretto il ragionamento?

  13. #13
    Utente
    Registrato il
    02-06
    Località
    ...
    Messaggi
    4.972
    Citazione Xerox Visualizza Messaggio
    In questo caso dovrei avviare un processo da un altro terminale,usare la ctermid,inviare il path al processo che voglio che stampi sul nuovo terminale e fare un freopen con il path. È corretto il ragionamento?
    E' una possibilità. Oppure apri un nuovo terminale subito dopo la fork e usi il suo pid per trovare il descrittore del file e redirigere l'output.

  14. #14
    Utente
    Registrato il
    01-06
    Messaggi
    9.639
    Citazione CorralX Visualizza Messaggio
    E' una possibilità. Oppure apri un nuovo terminale subito dopo la fork e usi il suo pid per trovare il descrittore del file e redirigere l'output.
    Scusa ma se io da un processo dopo una fork , apro un terminale,in ogni caso il figlio non ha comunque associato il terminale in esecuzione(cioè quello da dove si è lanciata l'app) e non quello aperto? Ti ho capito male, oppure intendevi sempre di lanciare un processo in un altro terminale ma ricavare il descrittore dal processo?(che sarebbe il buffer in uscita)

  15. #15
    Utente
    Registrato il
    02-06
    Località
    ...
    Messaggi
    4.972
    Citazione Xerox Visualizza Messaggio
    Scusa ma se io da un processo dopo una fork , apro un terminale,in ogni caso il figlio non ha comunque associato il terminale in esecuzione(cioè quello da dove si è lanciata l'app) e non quello aperto? Ti ho capito male, oppure intendevi sempre di lanciare un processo in un altro terminale ma ricavare il descrittore dal processo?(che sarebbe il buffer in uscita)
    Si dopo una fork copi il descrittore del terminale del padre, però puoi aprire un'altro terminale e redirigere l'output del figlio li, ignorando il terminale del padre.

Pag 1 di 2 12 UltimoUltimo

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •