nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Re: inotify e lettura di strutture dati da file descriptor

Von: vito.detullio@gmail.com [Profil]
Datum: 26.01.2008 21:47
Message-ID: <c60c3c33-524d-4360-9f2d-88c94b0ff7be@v29g2000hsf.googlegroups.com>
Newsgroup: it.comp.os.linux.development
On 26 Gen, 13:20, "Max M." <ed...@maxim.comm2000.it> wrote:

> Ricordati che -come ho detto- ogni singola 'read' può ricevere anche pi
ù
> eventi. Pertanto devi scorrere i blocchi uno per uno, usando ogni volta il

> valore di 'len' per passare quello successivo, finché non esaurisci la
> quantità di dati disponibili (che è il valore restituito da 'read',
*n
on*
> la dimensione del buffer).

prima di tutto, grazie! Senza di te non avrei mai colto che read
poteva restituire anche più strutture di fila!

in secondo luogo: non riesco a fare quello che dici:
diciamo che questo è il mio codice (semplificato e senza i controlli)

size_t base_size = sizeof(struct inotify_event);
size_t size = base_size + MAX_FILENAME_LEN;
struct inotify_event* events = malloc(size);
while (1) {
ssize_t readed = read(inotify_instance, events, size);
while (readed) {
// leggi events
int dimensioni_struttura = base_size + events->len;
readed -= dimensioni_struttura;
events += dimensioni_struttura;
}
}

a volte, però, mi accorgo che "mi perdo qualche evento per strada",
nel senso che quella mia variabile "dimensioni struttura" a volte è
troppo grande, e arrivo in una locazione di memoria totalmente
inutile...
ho provato anche con solo events->len (o con solo base_size, se è per
questo), ma non sono riuscito a capire dov'e' che sbaglio.

invece, a parte (giustamente) un warning da parte del compilatore sul
mismach dei tipi di dato, le cose vanno perfettamente se sostituisco
l'ultima riga con

events = events->name + events->len;

cosa mi sfugge?

[ Auf dieses Posting antworten ]

Antworten