Ri:linux-l: printk

Frank Reker <frank@reker.net> reker at inwind.it
Di Jul 17 14:27:08 CEST 2001


> Ok, dann will ich mal eine Fehlerbeschreibung geben, 
> 
> #define __KERNEL__
> #define MODULE
> 
> #include  <linux/kernel.h>
> 
> int main()
> {
>    printk(KERNEL_NOTICE "Hallo Welt!");
>    return 0;
> }
> 
> Das war das Programm und jetzt der Fehler
> 
> undefined reference to `printk`

Klar, printk ist eine reine Kernelfunktion, d.h. sie ist nur
dazu gedacht, dass der Kernel Meldungen auf die Konsole
schreibt. Sie ist daher auch nicht in der libc enthalten, so dass
du ein undefined reference bekommst. 
Um auf stdout zu schreiben, kannst du printf verwenden. Mit
fprintf kannst du an einen beliebigen File-handle schreiben.
Wenn es sich nicht um stdin, stdout, stderr handelt, musst du
das File erst mit fopen oeffnen, welches dann einen neuen
File-handle zurueckliefert. Das ganze funzt auch mit devices,
z.B. /dev/console oder /dev/tty ( die 2. virtuelle Console, die du mit
alt-control-F2 erreichst.) Um diese zu oeffnen, musst du allerding 
root sein, in der Gruppe tty sein, oder dir muss das Device 
gehoeren, sprich du hast dich dort bereits eingeloggt.
Anstatt fprintf, fopen, fclose, ... kannst du auch die system-calls
open, close, read und write benutzen, aber das ist nicht so komfortabel,
und nicht unbedingt auf andere BSe portabel. 
Um Meldungen an den syslog daemon zu schicken, gibt´s die
Funktion syslog(), die aehnlich funzt wie fprintf. 


-- 
Don´t worry be happy ...
Ciao tex




Mehr Informationen über die Mailingliste linux-l