|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2000
Città: Milano
Messaggi: 210
|
[C] stampare su STDOUT
Allora ho un programmino di log che deve leggere da una pipe e stampare il contenuto a schermo.
questo è il codice: Codice:
int main () { int fd,letti; char buff[80]; while((fd=open("/tmp/pipe.out",O_RDONLY)) == -1){ sleep(1); } while(1) { IFERROR(letti=read(fd,buff,80),"Leggendo da pipe"); IFERROR(write(STDOUT,buff,letti), "errore in scrittura su stdout"); } return 0; } Quello che non capisco è: come faccio a fargli stampare la data e l'ora corrente SOLO QUANDO CI SONO DATI DISPONIBILI SULLA PIPE??? vi ringrazio. ciao! Ultima modifica di trunks81 : 07-03-2005 alle 17:56. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Se ho capito bene quello che chiedi, credo che basti controllare se letti è maggiore di zero...
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Nov 2000
Città: Milano
Messaggi: 210
|
Quote:
|
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
La read è di default bloccante e _ovviamente_ quando ritorna ci sono (o meglio c'erano fino a pochi us fa) dei dati disponibili. Se ti si chiede di vedere se ci sono dati, _senza_ prelevarli dal pipe, utilizza una poll.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2000
Città: Milano
Messaggi: 210
|
io devo solamente stampare la data e l'ora corrente ogni volta che mi arriva qualcosa dalla pipe.
????? |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non avevo pensato al fatto che la read è bloccante...in effetti basta stampare la data ogni volta che esci dalla read...
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Nov 2000
Città: Milano
Messaggi: 210
|
Quote:
se io metto: Codice:
int main () { int fd,letti; char buff[80]; while((fd=open("/tmp/pipe.out",O_RDONLY)) == -1){ sleep(1); } while(1) { IFERROR(letti=read(fd,buff,80),"Leggendo da pipe"); IFERROR(write(STDOUT,buff,letti), "errore in scrittura su stdout"); } WRITELN("CIAO"); //lo faccio solo per prova return 0; } ![]() Ultima modifica di trunks81 : 07-03-2005 alle 17:56. |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Lo devi mettere dopo la read...ma che roba è writeln ?
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2000
Città: Milano
Messaggi: 210
|
il WRITELN lo uso per le stampe di prova.
Cmq se lo metto dopo la read, appena finiscono veramente i dati da leggere, mi va in ciclo infinito. scusate l'ignoranza....ma di C non ne capisco prorpio. Ultima modifica di trunks81 : 07-03-2005 alle 18:34. |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Allora metti if(letti >0) WRITELN("CIAO");
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Nov 2000
Città: Milano
Messaggi: 210
|
Quote:
non so perchè...ma mi continua ad andare in ciclo infinito.... |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Allora credo che ci sia qualche altra motivazione...una modifica del genre non può compromettere il corretto funzionamento di un programma...
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Nov 2000
Città: Milano
Messaggi: 210
|
Quote:
|
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
trunks immagino che WRITELN e IFERROR siano macro dichiarate da te giusto??
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Nov 2000
Città: Milano
Messaggi: 210
|
Quote:
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:15.