Newsgroup: it.comp.lang.c
Titolo: metodologia lettura sorgenti

Salve a tutti..ho una domanda, forse banale, per voi...
Mi piacerebbe leggermi i sorgenti del kernel di linux per capire bene come
vengono effettuate delle syscall, come viene gestita la memoria, protocolli
etc...
 Insomma vorrei leggere/capire i sorgenti di linux..
Ho una conoscenza media di C ma... non so da dove iniziare per capire..
Intendo dire: quando si hanno decine e decine di sorgenti ed include, esiste
una tecnica/prassi da seguire per poter capire il sorgente senza perdersi in
variabili dichiarate chissà dove etc etc...?
Quindi metodologia applicabile non solo nel campo del kernel di linux, ma
anche per qualunque applicazione "grossa"..
Penso abbiate capito a cosa mi riferisco, quindi...spero in una vostra
illuminazione, grazie.

anche per qualunque applicazione "grossa"..
A qualsiasi cosa appunto ...
per il Kernel hai una complicazione in piu' pero': e' scritto a
oggetti, ma in C. Ora, se tu programmi a oggetti in un linguaggio che
lo supporta nativamente il codice risulta discretamente chiaro e
pulito, perche' tutto il lavoro lo fara' il compilatore per te
(overloading dei metodi tanto per dirne una).
In C devi farti tutto a manina, quindi avrai del codice in piu'.
Se tu hai almeno qualche rudimento con i concetti di oggetto, classe,
metodo ti sara' piu' facile capire.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 variabili dichiarate chissà dove etc etc...?
Di solito vengono dati dei nomi abbastanza significativi a .c e .h.
Spesso sono a coppie.  Quindi se hanno lo stesso nome sono legati.
Da qualche parte ci deve essere uno o piu' .h con le strutture principali e
le
variabili globali.
Di solito gia' da li' si capisce molto. Purtroppo non c'e' un modo standard
di trovarlo, si procede ad intuito.
Ricorda che in C per condividere una variabile globale o una struttura tra
due diversi .c in un codice scritto bene, queste devono essere definite in
un
.h che venga incluso da entrambi i .c. Quindi controlla quali .h vengono
inclusi
da piu' .c. Vedrai che becchi subito i #define, le variabili globali e le
strutture.
Ad esempio sono dei buoni candidati un file
structs.h o un .h che abbia lo stesso nome dell'eseguibile o della libreria.
Poi ti consiglio di cercare il main. Li' parte il programma e da li' vengono
chiamate le funzioni principali (spesso locate nei vari .c). Se capisci a
grandi linee cosa fa il programma, perche' chiama certe funzioni, perche'
fa partire certi threads, il resto diventa un lavoro relativamente piu'
semplice.
Perche' vai a controllare solo i sorgenti che ti interessano.
                                                      Andrea Z.

 anche per qualunque applicazione "grossa"..
Tempo fa ho trovato una utility (per console Linux) che crea una serie di file
html partendo dalla root-dir di un sorgente: permetteva quindi di navigare tra
i sorgenti in modo molto veloce, seguendo i riferimenti ad ogni
variabile/funzione presenti nei vari file. Non ricordo il nome dell'utility, ma
forse qualcuno la usa e puo` aiutarmi a ricordarlo...
-- 
 Ciao, Bianco.
 Reply to luca.bianco (at) 
tiscali.it

 dell'utility, ma forse qualcuno la usa e puo` aiutarmi a ricordarlo...
Trovato: global


 variabili dichiarate chissà dove etc etc...?
http://lxr.linux.no/source/
Qualsiasi variabile, funzione o macro che compare è un link verso il 
modulo in cui è definita/dichiarata.
-- 
Ciao,
[Resnick]
*** Togli TOGLI per rispondere (!) ***

 Trovato: global
più precisamente?

 più precisamente?
Anzi, ti diro', per creare l'html devi usare gtags/htags. Sulla mia Debian
sono gia' installati, mi basta lanciare gtags nella root dell'albero dei
sorgenti, poi lanciare htags e mi ritrovo una dir HTML con un bel file
index.html. Da quel che vedo, tu usi Win, e non so se ci sia qualcosa di
simile che giri da quelle parti ;-)
Per inciso, riguardo a global, dal man: "Global find the locations of
specified object in C, C++, Yacc, Java and assembler source files.  Global
can treat a source tree, that is, a directory that has subdirectories and
source files.  You can get the relative path of objects from anywhere
within the tree.  Global can locate not only function definitions but also
function references and other symbols."
E' un tool per console, quindi niente html e/o grafica.
