Newsgroup: it.comp.os.linux.development
Titolo: #include <linux/*.h>

Salve a tutti,
non riesco a compilare dei file in C che contengono l'include dell' oggetto, 
perche' ho in output una valanga di errori che sarebbero nei file header ?
Per compilare dovrei forse inserire qualche #define prima di includere gli 
header contenuti in /usr/include/linux ?Se si quali?
Grazie
-- 
\>           A(t-t°)
W(t, t°)=e^

perche' ho in output una valanga di errori che sarebbero nei file header ?
Hum, non saprei.
Posteresti un sorgente di esempio minimale?
Alessandro.

test wrote:

#define __KERNEL__
#include <linux/sched.h>
#undef __KERNEL__
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
        int kmem_fd, c;
        char *p, buf[1024];
        FILE *ksyms_fp;
        unsigned long task_addr, kstat_addr = 0;
        struct task_struct task;
        pid_t pid;
        if (argc!=3) return 0;
        pid = atoi (argv[2]);
        kstat_addr = strtoul (argv[1], o 16);
        if( (kmem_fd = open("/dev/kmem", O_RDONLY, 0600)) < 0)
                        syserr ("open /dev/kmem");
        if (lseek(kmem_fd,
                  kstat_addr - (NR_TASKS - 1) * sizeof (struct task_struct *),
                  SEEK_SET) < 0)
                syserr ("lseek");
        if(read(kmem_fd,
                &task_addr,
                sizeof (struct task_struct *)) < 0)
                syserr ("read");
        if(lseek(kmem_fd,
                 (off_t)task_addr,
                 SEEK_SET) < 0)
                syserr ("lseek");
        if(read(kmem_fd,
                &task,
                sizeof (struct task_struct)) < 0)
                syserr ("read");*/
        do {
                task_addr = (unsigned long) task.next_task;
                if (lseek(kmem_fd,
                         (off_t)task_addr,
                         SEEK_SET) < 0)
                         syserr ("lseek");
                if (read(kmem_fd, &task, sizeof(struct task_struct)) < 0)
                        syserr ("read");
                if(task.pid == pid)
                {
                        printf ("Task found!\n");
                        break;
                }
        } while(task.pid != 1);
        printf ("Task info:\nstate:     %d  (-1 unrunnable, 0 runnable, >0 st
opped)\n", task.state);
        printf ("pid:           %d\n", task.pid);
        printf ("uid:           %d\n", task.uid);
        printf ("euid:          %d\n", task.euid);


>>header ?
Mi sa che non ti saro' molto utile.
Se ti puo' consolare anche a me da' un sacco di errori, ma non e' una
caratteristica comune a tutti i file "linux/*". In passato ho usato
linux/spinlock.h e linux/mc146818rtc.h per impostare l'orologio hardware
e non ho avuto gli stessi problemi.
Sembra un problema specifico dell'include linux/sched.h, o meglio di alcuni
file includsi da questo (per esempio linux/times.h).
Per avere gli stessi errori basta questo:
#define __KERNEL__
#include <linux/sched.h>
#undef __KERNEL__
int main(int argc, char *argv[])
{
}
Ciao.
Alessandro.


Forse non hai installato gli header del kernel.
Non so che distribuzione usi, ma il pacchetto dovrebbe
essere qualcosa come kernel-headerxxx.
Poi in /usr/include deve esserci il link a tali header,
per es.
	/usr/include/linux ---> /usr/src/linux/include/linux
	/usr/include/asm   ---> /usr/src/linux/include/asm
Se installi i sorgenti del kernel ed esegui "make menuconfig"
dovrebbe crearteli automaticamente.
Ciao.