Je pensais qu'on pouvait acceder, aux fonctions userland en mode noyau?
En programmation C, le noyau tourne dans une "freestanding implementation"(*), car il tourne directement au-dessus du matériel, et ne peut utiliser toutes les possibilités du langage C (une telle implémentation n'est pas obligée de fournir une grande partie de la bibliothèque standard, ni les types complexes). Un programme "normal", qui tourne au-dessus de l'OS est lui dans une hosted implementation, c'est-à-dire une implémentation complète du C (bibliothèque standard entière, et tout et tout).
Ca, c'est pour le début. Ensuite, select() est défini par POSIX, qui fournit une extension au C. Pour celle-ci, la distinction freestanding/hosted est délibérément plus floue, ce qui fait que le noyau peut fournir un certain nombre de fonctions de POSIX, mais pas forcément toutes. Voici ce que dit POSIX.1, au paragraphehosted implementation ( http://www.opengroup.org/onlinepubs/009695399/nframe.html ) :
Note that the line between a hosted implementation and a native implementation is blurred, since most implementations will provide some services directly from the kernel and others through some indirect path. (For example, fopen() might use open(); or mkfifo() might use mknod().) There is no necessary relationship between the type of implementation and its correctness, performance, and/or reliability.
En bref, tu ne peux pas programmer un module noyau avec la doc POSIX sous les yeux, mais la doc du noyau elle-même...
(*) Bon, peut-être pas strictement conforme, je n'en sais rien, et après tout on s'en fiche, un noyau c'est plein de trucs non-portables par définition, mais on va dire...
[^] # Re: Euh...
Posté par alf . En réponse au message comportement de select dans un module?. Évalué à 0.
En programmation C, le noyau tourne dans une "freestanding implementation"(*), car il tourne directement au-dessus du matériel, et ne peut utiliser toutes les possibilités du langage C (une telle implémentation n'est pas obligée de fournir une grande partie de la bibliothèque standard, ni les types complexes). Un programme "normal", qui tourne au-dessus de l'OS est lui dans une hosted implementation, c'est-à-dire une implémentation complète du C (bibliothèque standard entière, et tout et tout).
Ca, c'est pour le début. Ensuite, select() est défini par POSIX, qui fournit une extension au C. Pour celle-ci, la distinction freestanding/hosted est délibérément plus floue, ce qui fait que le noyau peut fournir un certain nombre de fonctions de POSIX, mais pas forcément toutes. Voici ce que dit POSIX.1, au paragraphehosted implementation ( http://www.opengroup.org/onlinepubs/009695399/nframe.html ) :
En bref, tu ne peux pas programmer un module noyau avec la doc POSIX sous les yeux, mais la doc du noyau elle-même...
(*) Bon, peut-être pas strictement conforme, je n'en sais rien, et après tout on s'en fiche, un noyau c'est plein de trucs non-portables par définition, mais on va dire...