Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Salve a tutti.Mi sono imbattuto nelle liste bidirezionali che usa il kernel, ho incontrato questa macro container_of che ho capito cosa restituisce ma non capisco come ci riesce:
*__mptr è una variabile della macro. è definita come const dunque il suo contenuto non può mutare. il tipo della variabile è definito da typeof( ((type *)0)->member ). in particolare typeof è un'estensione gnu del c che NON è ansi. ritorna il tipo di una variabile. ad esempio se tu crei un puntatore ad un oggetto che può mutare puoi usare typeof per indicare indirettamente il tipo. è un accrocco per fare polimorfismo in c. un esempio banalissimo:
Ok, forse dovrei aver capito.Volevo fare qualche prova sfruttando le macro del kernel contenute in list.h, ma non riesco ad includere questo file!Sulla mia macchina il path completo è /usr/src/linux/include/linux/list.h, ma se lo specifico ottengo un warning del tipo:
mmm... il warning significa che non è bene usare gli headers con le funzioni interne del kernel per fare un progetto userspace. per gli errori andrebbero visti, così su due piedi non saprei...
#warning "don't include kernel headers in userspace"
Mai, ripeto _mai_ usarli, sono privati ad uso esclusivo del kernel.
- li usi, il tuo progamma funziona
- la prossima versione del kernel, 50% che va, 50 % che non va piu`
- due o piu` kernel successivi, dimentica il tuo programma