PDA

View Full Version : Linux e C - Aiuto!


ndakota91
29-05-2007, 14:15
Salve a tutti gli user del forum, sono ndakota91, e sono nuovo qui. Avrei bisogno di aiuto, sto cercando di programmare in C un programmino sotto Mandriva, e mi serve aiuto con il header "time.h". In pratica uso la seguente funzione per leggere un file:

#include <stdio.h>
#include <time.h>
#include <string.h>
...
while(fgets(buffer, 256, stream) != NULL)
{
sleep(1);
printf("%s", buffer);
}
...
return 0;

In pratica legge una stringa da uno stream, la mette nel buffer, attende un secondo e poi la "printa". Per il mio scopo l'attesa di 1 secondo e' troppo, come faccio a fare "dormire" il PC meno di un secondo?

P.S.:Spero di essere stato chiaro.... Grazie mille a chi mi aiuta :)

k4ez4r
29-05-2007, 14:39
Prova con la usleep() (http://publib.boulder.ibm.com/iseries/v5r1/ic2924/index.htm?info/apis/usleep.htm)

ndakota91
29-05-2007, 15:08
Grazie... pero come si usa?

andbin
29-05-2007, 15:18
Grazie... pero come si usa?Innanzitutto includi <unistd.h>, poi il parametro è unsigned long usec, sono cioè microsecondi.

ilsensine
29-05-2007, 15:19
Prova con la usleep() (http://publib.boulder.ibm.com/iseries/v5r1/ic2924/index.htm?info/apis/usleep.htm)
Non credo che quella documentazione si riferisca a linux...

k4ez4r
29-05-2007, 15:46
Non credo che quella documentazione si riferisca a linux...Non lo so, però ho provato l'esempio e a me compila e gira

#include <unistd.h>
#include <stdio.h>
#include <time.h>

void timestamp( char *str ) {

time_t t;

time( &t );
printf( "%s the time is %s\n", str, ctime(&t) );
}

int main( int argc, char *argv[] ) {

int result = 0;

timestamp( "before usleep()" );
result = usleep( 999999 );
timestamp( "after usleep()" );

printf( "usleep() returned %d\n", result );

return( result );
}

@ndakota91: ma non hai cliccato sul link? :mbe:
Prova con la usleep() (http://publib.boulder.ibm.com/iseries/v5r1/ic2924/index.htm?info/apis/usleep.htm)

ilsensine
29-05-2007, 15:52
Non lo so, però ho provato l'esempio e a me compila e gira

Sì certo, usleep è presente su tutti gli unix, ma su linux non è implementata con i segnali (ma con la nanosleep), funziona anche per sleep superiori a 1000000us e non mi risulta affatto che sia deprecata.

k4ez4r
29-05-2007, 15:59
Sì certo, usleep è presente su tutti gli unix, ma su linux non è implementata con i segnali (ma con la nanosleep), funziona anche per sleep superiori a 1000000us e non mi risulta affatto che sia deprecata.Quindi?

Alla fine non ho capito se usare la usleep() sia bene o male :D

edit: volevi dire che su linux è meglio usare nanosleep()?

71104
29-05-2007, 16:10
Quindi?

Alla fine non ho capito se usare la usleep() sia bene o male :D

edit: volevi dire che su linux è meglio usare nanosleep()?

sta solo dicendo che è meglio linkare la documentazione giusta...
http://www.linuxmanpages.com/man3/usleep.3.php

edit - ... la quale però sostiene autorevolmente che usleep è obsoleta e che è meglio usare nanosleep o setitimer, cosa di cui non mi ero accorto :D
perciò la risposta è: usare usleep è male :read:

k4ez4r
29-05-2007, 16:24
sta solo dicendo che è meglio linkare la documentazione giusta...
http://www.linuxmanpages.com/man3/usleep.3.php

edit - ... la quale però sostiene autorevolmente che usleep è obsoleta e che è meglio usare nanosleep o setitimer, cosa di cui non mi ero accorto :D
perciò la risposta è: usare usleep è male :read:Ok tutti felici con la nanosleep allora :)

squeeme
29-05-2007, 19:23
la più agevole era la delay (millsecondi) con la quale creavo le pause x i suoni :D

71104
29-05-2007, 21:17
per i millisecondi c'è la semplice sleep: quella non è deprecata, anzi è standard POSIX.

ndakota91
30-05-2007, 14:58
71104: Scusa ma con sleep() il sistema attende un certo numero di secondi(almeno a me, forse saro' l'unico al mondo con PC cosi... :))

Cioe' se uso sleep(1); [che e' il minimo] il sistema attende un secondo. La mia intenzione era quello di printare un array una lettera alla volta con qualche millisecondo di pausa e far sembrare questa operazione come una "battitura di e-mail" per esempio. Comunque ho provato con usleep(), funziona, qual'e' il problema di questa istruzione?

71104
30-05-2007, 18:59
71104: Scusa ma con sleep() il sistema attende un certo numero di secondi AAAAAARGH hai perfettamente ragione (e lo sapevo pure...), ho commesso un errore madornale perché mi sono confuso con la Sleep (con la S maiuscola) delle Win32, che prende i millisecondi :D :D :D

shame on me* :mc: :muro: :fagiano:

*trad.: scemo so' io :fagiano:

Comunque ho provato con usleep(), funziona, qual'e' il problema di questa istruzione? e io che ne so, è il man che dice che è obsoleta :O