Ciao a tutti.
Avrei bisogno, se possibile di un chiarimento/aiuto.
Premessa: gia' da vari anni uso con successo delle printf a video con la \r alla fine (carriege retourn) per visualizzare per esempio di un ciclo di 2000 iterazioni, che il ciclo va avanti con printef del tipo
printf("Iterazione numero %4d \r",i);
fflush(stdout):
in cui nell'ultima riga della schermo vedo sempre la scritta e cambia solo il numero. (Devo forzare con fflush lo stdout per evitare che il video bufferizzi).
Adesso la questione e' leggermente piu' complessa.
Sto sviluppado un programma C che per mezzo di bus GBIP controlla vari strumenti e legge da una lan dei dati messi a disposizione dal dispositivo sotto test tramite istruzioni del tipo telnet.
Sostanzialmente si tratta di rilevare nello stesso istante due potenze, una tramite la GPIB e l'altra tramite la LAN. L'idea migliore che mi e' venuta e' stata quella di generare tramite una fork un processo figlio che dentro di se ha due while annidati con entrami una variabile presente in shared memory.
Il processo padre riesce a pilotare il figlio ed a sincronizzarlo con lui per mezzo dei due while annidati e le variabili in Shared Memory.
Qui finalmente arriviamo al problema che ho.
Sempre al fine di avere la sensazione che il programma giri,
nel processo padre ho una scritta del tipo simile a quella precedente solo
che alla fine non c'e' assolutamente niente.
Il processo figlio dal canto suo effettua una scritta analoga:
printf("Iterazione del processo figlio n. %4d \r",j);
fflush(stdout);
che si affianca a quella del padre ed il tutto sta sulla medesima riga e posso contraollare, ogni tanto che i due processi siano sincroni.
Il tutto funziona se faccio come ho detto: se decido di fare apparire sulla medesima riga altri dati (
p.es. la potenza letta) automaticamente la scritta va a capo e genera una serie di scritte, una sotto l'altra che mi riempiono il video.
Avreste idea di che cosa stia sbagliando?
Per me sarebbe importante anche monitorare la potenza che a volte puo' andare a zero segnalando che il dispositivo non sta funzionando correttamente
e quindi fermare la misura.
Aggiungo che sono in XP in ambiente cygwin. Se servono ulteriori informazioni, ovviamente posso fornirle.
Grazie