 
View Full Version : Reindirizzamento output in C
Abdujaparov
02-05-2006, 16:48
Salve a tutti, vorrei reindirizzare l'output su una pipe e poi reimpostarlo, per impostarlo sulla pipe credo si saperlo fare:
pipe(fd[2]);
close(1);
dup(fd[0]);
ora per riportare lo standard input al suo normale file descriptor cosa devo fare?
Grazie, ciao ciao.
Salve a tutti, vorrei reindirizzare l'output su una pipe e poi reimpostarlo, per impostarlo sulla pipe credo si saperlo fare:
pipe(fd[2]);
close(1);
dup(fd[0]);
ora per riportare lo standard input al suo normale file descriptor cosa devo fare?
Grazie, ciao ciao.Stiamo ovviamente parlando di programmazione su sistemi Unix/Linux ;) . Non ho ben capito esattamente cosa devi fare di preciso, quindi non saprei bene cosa risponderti. Ti posto il codice per reindirizzare lo standard output su una pipe e poi rimettere a posto lo standard output.
int fd_pipe[2];
int fd_out_bak;
pipe (fd_pipe);   /* ottiene i due descrittori della pipe */
fd_out_bak = dup (0);   /* salva il descrittore dello standard output */
dup2 (fd_pipe[1], 0);    /* fa puntare lo standard output sulla pipe di scrittura */
.... qui se scrivi sul descrittore 0 (output) scrivi in realtà sulla pipe ....
dup2 (fd_out_bak, 0);    /* rimette a posto lo standard output */
/* chiude tutti i descrittori */
close (fd_out_bak);
close (fd_pipe[0]);
close (fd_pipe[1]);Fammi sapere se è quello che volevi fare. Se non è così, ti chiedo scusa perché allora non ho capito una mazza di quello che volevi fare. :p
Abdujaparov
02-05-2006, 18:26
Proprio lui!!! Esatto!!!!!
Ciao posso chiederti un'altra cosa?
La funzione time(NULL) restituisce un intero? Se la chiamo in due momenti diversi mi dovrebbe dare due numeri diversi giusto? Quindi se faccio la differenza tra la prima chiamata e la seconda dovrei ottenere il tempo trascorso tra le due chiamate no?
Questo tempo in cosa è espresso? Come posso trasformarlo in secondi?
Se non si calcola così il periodo di tempo in secondi tra due chiamate di una funzione qualsiasi come posso calcolarlo (sempre su sistemi unix)?
Grazie, ciao ciao.
Proprio lui!!! Esatto!!!!!Ok, allora avevo capito bene! :) 
La funzione time(NULL) restituisce un intero?Sì, ritorna un valore intero di tipo time_t (che, se non sbaglio, è un typedef per long int).
Se la chiamo in due momenti diversi mi dovrebbe dare due numeri diversi giusto? Quindi se faccio la differenza tra la prima chiamata e la seconda dovrei ottenere il tempo trascorso tra le due chiamate no?
Questo tempo in cosa è espresso? Come posso trasformarlo in secondi?Certo, il tempo riportato dalla time() ha la risoluzione di 1 secondo. Quindi chiamando la time() in 2 momenti diversi e facendo la differenza si ottiene il numero di secondi, interi ovviamente, trascorsi.
Se non si calcola così il periodo di tempo in secondi tra due chiamate di una funzione qualsiasi come posso calcolarlo (sempre su sistemi unix)?Dipende da cosa devi fare. Se devi misurare delle operazioni che impiegano dei minuti, la time() credo che vada bene. Se invece devi misurare dei tempi piccoli, di pochi secondi o anche sotto il secondo ... allora la time non va affatto bene. In questo caso potresti usare la funzione gettimeofday che ti fornisce i secondi e anche i microsecondi. C'è solo da fare qualche calcoletto in più perché secondi e microsecondi vengono forniti separati. Vedi 'man gettimeofday' su Linux.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.