|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
[C]leggere /proc
ho bisogno di leggere /proc, il problemino e` che il file che leggo cambia +/- continuamente.
In altre occasioni ho avuto dei problemi con file che cambiano mentre il canale sul file e` aperto, gli stessi problemi si ripercuotono anche su questo pseudo filesystem? per ora il programma ha sempre funzionato senza problemi, ma volevo essere sicuro di aver fatto la cosa giusta. il fatto che i file siano di 0 byte e che non sono su un file system tradizionale (oltre che tutti i manuali che lo usano normalmente) mi ha fatto pensare che sia da fare cosi`.... tra l'altro su advanced linux programming ho visto che legge il file in un colpo solo con la read e che poi si scansiona il suo buffer invece del file... e` solo una questione di prestazioni (suppongo che una sola chiamata di lettura sia piu` veloce di tante...) o deriva anche dal mio "problema"? grazie, ciao! |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
E' preferibile leggere in un solo colpo. Il file può sempre cambiare senza preavviso tra due letture successive, altrimenti potresti generare un banalissimo DoS se un programma senza privilegi particolari apre un file in /proc, e lo tiene aperto.
Tieni conto che molti file in proc non sono più grandi di una pagina.
__________________
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 |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
mmmmh....
e quanto supporresti essere grande un file di /proc/net/tcp? se mi perdo delle righe non trovo l'inode e non risaliro` mai alla socket corretta.... grazie, sei sempre il piu` beccio ![]() ![]() ![]() ciao! |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
![]() Purtroppo, i file in /proc non possono essere oggetto né di mmap né di stat. Quello che puoi fare è: - allocare un buffer ragionevolmente "grande" - provare a leggere tutto il buffer - Se il buffer è stato letto completamente, raddoppialo e riprova la lettura
__________________
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 |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:46.