|
|||||||
|
|
|
![]() |
|
|
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 18: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 18: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 19: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: 23:02.



















