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
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
- Max M. (26.01.2008 22:43)
