Re: inotify e lettura di strutture dati da file descriptor
Datum: 26.01.2008 11:43
Message-ID: <8763xgj299.fsf@cyrano.gianoziaorientale.it>
Newsgroup: it.comp.os.linux.development
>>>>> Long count = 12.19.15.0.9; tzolkin = 7 Muluc; haab = 17 Muan. >>>>> I get words from the Allmighty Great Gnus that >>>>> "VD" == Vito DeTullio <Vito.DeTullio@gmail.com> writes: VD> struct inotify_event { VD> int wd; /* Watch descriptor */ VD> uint32_t mask; /* Mask of events */ VD> uint32_t cookie; /* Unique cookie associating related VD> events (for rename(2)) */ VD> uint32_t len; /* Size of 'name' field */ VD> char name[]; /* Optional null-terminated name */ VD> }; VD> come si può vedere l'ultimo campo è a dimensione variabile (tant'è VD> che "len" è lì proprio a questo scopo). VD> Io, con la read, vorrei poter leggere "direttamente" dal fd, e VD> scrivere "direttamente" in una variabile di tipo struct VD> inotify_event, solo che la dimensione della struttura la devo VD> calcolare al volo (in man inotify stessso leggo che la dimensione di VD> un evento è size(struct inotify_event) + evento->len), e non so come VD> fare, visto che è contenuta nella struttura stessa, e quindi non so VD> che parametro passare a malloc() per poter allocare lo spazio VD> "giusto" per il dato che mi viene dal file! Hmmm... Se la mia conoscenza del C non mi tradisce ( K&R forever :)!!! ), name è un puntarore, ovvero in memoria non hai una cosa del tipo: (leggere con font fixed e senza riformattazioni - DEADBEEF è un valore a 32 bit che a noi non interessa) campo :[ wd ][ mask ][ cookie ][ len ][ name ] valore: DEADBEEF DEADBEEF DEADBEEF 23 [IoSonoIlNomeDell'Evento] ma campo :[ wd ][ mask ][ cookie ][ len ][ name ] valore: DEADBEEF DEADBEEF DEADBEEF 23 *pointer ed altrove nella memoria (alla locazione *pointer) [IoSonoIlNomeDell'Evento] Quindi tu allochi un inotify_event e leggi quello, poi vedi quanto vale len e allochi len+1*sizeof(char) byte per il nome (+ 1 perché è null terminated ed il sizeof(char) perché non capita, ma se char non vale 1... :) ) Sperando di non aver detto vaccate... Ma non dovrei. -- /\ ___ Ubuntu: ancient /___/\_|_|\_|__|___Gian Uberto Lauri_____ African word //--\| | \| | Integralista GNUslamico meaning "I can \/ e coltivatore diretto not install di software Debian" a Cesare avrei detto di scrivermi | I would have told Caesar to write a fnvag@rat.vg | me at fnvag@rat.vg[ Auf dieses Posting antworten ]
Antworten
- Max M. (26.01.2008 13:34)
