- Codice: Seleziona tutto
#include <stdio.h>
#include <linux/sched.h> /*from /usr/src/linux/include/linux */
int main( void )
{
struct task_struct *task = &init_task;
do
{
printf("%s [%d] parent %s\n", task->comm, task->pid, task->parent->comm );
} while((task = next_task(task)) != &init_task );
return 0;
}
Sto provando a compilarlo con gcc con le opzioni -I, -isystem visto che "linux/sched.h" si trova in /usr/src/linux/include/, ma ricevo il segunete errore:
- Codice: Seleziona tutto
p.c: In function 'main':
p.c:7: error: 'init_task' undeclared (first use in this function)
p.c:7: error: (Each undeclared identifier is reported only once
p.c:7: error: for each function it appears in.)
p.c:12: error: dereferencing pointer to incomplete type
p.c:12: error: dereferencing pointer to incomplete type
p.c:12: error: dereferencing pointer to incomplete type
p.c:14: warning: assignment makes pointer from integer without a cast
Ma init_task é dichiarata in sched.h. Se includo linux/init_task.h mi da una sfilza di errori, es:
- Codice: Seleziona tutto
simo@localhost:~/Desktop/d$ gcc -I /usr/src/linux/include/ p.c -o p
In file included from /usr/src/linux/include/linux/preempt.h:9,
from /usr/src/linux/include/linux/spinlock.h:50,
from /usr/src/linux/include/linux/rcupdate.h:37,
from /usr/src/linux/include/linux/init_task.h:4,
from p.c:4:
/usr/src/linux/include/linux/thread_info.h:26: error: expected specifier-qualifier-list before 'u32'
/usr/src/linux/include/linux/thread_info.h:34: error: expected specifier-qualifier-list before 'clockid_t'
In file included from /usr/src/linux/include/asm/bitops.h:13,
from /usr/src/linux/include/linux/bitops.h:17,
from /usr/src/linux/include/linux/thread_info.h:46,
from /usr/src/linux/include/linux/preempt.h:9,
from /usr/src/linux/include/linux/spinlock.h:50,
from /usr/src/linux/include/linux/rcupdate.h:37,
from /usr/src/linux/include/linux/init_task.h:4,
from p.c:4:
/usr/src/linux/include/asm/alternative.h:45: error: expected specifier-qualifier-list before 'u8'
In file included from /usr/src/linux/include/linux/bitops.h:17,
from /usr/src/linux/include/linux/thread_info.h:46,
from /usr/src/linux/include/linux/preempt.h:9,
....
Con il flag --with-headers mi segnala che l'opzione non é riconosciuta, probabilmente perché gcc non é configurato?
Sono molto confuso..
Il codice arriva da questa pagina, io peró l'ho editato un pó appunto per non eseguirlo come un modulo. Se é possibile compilarlo, e penso di si, quali sono i flag corretti? O é proprio necessario un makefile?
Grazie per il vostro insegnamento


In ogni caso ti ringrazio per il suggerimento. Onestamente mi aspettavo che non fosse possibile, anche se speravo in una piccola percentuale di possibilitá.