OVH Cloud OVH Cloud

open dans un module ?

3 réponses
Avatar
Kakrocq
Suite a la question que j'ai posé sur mmap et shmem je mes pose une
question sur les modules.
J'ai essayé d'intégrer donc une ouverture d'un fichier dans un module il
semble que je ne peux pas utiliser la librairie C .
par exemple , si j'ajoute
#include <sys/types.h>
j'ai alors des erreurs de compilation .
J'ai alors essayer fopen la compilation marche mais lorsque je lance
insmod monmodule.o j'ai alors
monmodule.o unresolved symbol fopen

ma question est donc comment ouvrir un fichier dans un module.
idem pour mapp

3 réponses

Avatar
Nicolas George
Kakrocq wrote in message :
ma question est donc comment ouvrir un fichier dans un module.


Euh, ça me semble assez suspect, comme politique, ça essayer d'ouvrir un
fichier dans un module. Déjà, un file descriptor, ça vit dans l'espace de
droits d'un ou plusieurs processus, je ne suis pas du tout certain que le
noyau ait prévu des file-descriptors orphelins.

Je pense qu'il vaudrait mieux que tu décrives de manière un peu plus
générale ce que tu souhaites faire au final.

Avatar
Vincent Bernat
OoO Lors de la soirée naissante du mercredi 02 février 2005, vers
18:18, Kakrocq disait:

Suite a la question que j'ai posé sur mmap et shmem je mes pose une
question sur les modules.
J'ai essayé d'intégrer donc une ouverture d'un fichier dans un module il
semble que je ne peux pas utiliser la librairie C .
par exemple , si j'ajoute
#include <sys/types.h>
j'ai alors des erreurs de compilation .
J'ai alors essayer fopen la compilation marche mais lorsque je lance
insmod monmodule.o j'ai alors
monmodule.o unresolved symbol fopen

ma question est donc comment ouvrir un fichier dans un module.
idem pour mapp


Je pense que cette question a sa place dans fr.comp.os.linux.moderated
et place donc le suivi sur celui-ci.

Quand tu programmes un module, tu as des possibilités beaucoup plus
restreintes, notamment à cause de l'absence de libc, de la difficulté
de communiquer avec l'espace utilisateur et de la difficulté à
utiliser les appels système. D'ailleurs, il y a des discussions sur
l'intégration d'une mini libc dans le noyau.

Pour faire simple, tu ne peux pas ouvrir facilement un fichier dans un
module. En effet, tu n'es pas dans le contexte d'un processus donc les
appels systèmes comme open ne sont pas utilisables. De plus, jusqu'à
récemment, le noyau ne pouvait pas être préempté, or lire un fichier
nécessite d'aller lire sur le disque donc de bloquer. On ne peut rien
faire de bloquant dans le noyau. Il te faudrait donc faire tout un tas
de trucs compliqués pour pouvoir lire ton fichier.

A priori, si tu veux lire ton fichier, c'est que tu veux sans doute
interagir avec l'utilisateur. Il est donc beaucoup plus simple de
passer des paramètres à ton module. Si ton module demande trop d'infos
pour les passer en paramètres ou s'il y a des infos qui viendront
après le chargement, tu dois construire une interface utilisateur avec
ton module : tu communiqueras avec lui à un travers un device ou un
ioctl, donc en codant open, read, write et compagnie dans ton module.

Ensuite, pour le mmap, pareil.
--
/* Nobody will ever see this message :-) */
panic("Cannot initialize video hardwaren");
2.0.38 /usr/src/linux/arch/m68k/atari/atafb.c

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.

Avatar
Thomas Nemeth
Tu n'avais pas mis de fu2. Je le positionne sur fcou : ce n'est pas de
la config Linux.

Le mer 02 fév 2005 à 18:18, Kakrocq a tapoté :
| Suite a la question que j'ai posé sur mmap et shmem je mes pose une
| question sur les modules.
| J'ai essayé d'intégrer donc une ouverture d'un fichier dans un module il
| semble que je ne peux pas utiliser la librairie C .

Tout à fait. Tu ne peux utiliser que les fonctions offertes par
le noyau.


| par exemple , si j'ajoute
| #include <sys/types.h>

Erf... Un include de la libc.


| j'ai alors des erreurs de compilation .
| J'ai alors essayer fopen la compilation marche mais lorsque je lance

fopen fait partie de la libc.


| insmod monmodule.o j'ai alors
| monmodule.o unresolved symbol fopen

Un peu normal.


| ma question est donc comment ouvrir un fichier dans un module.
| idem pour mapp

Un module n'a pas à faire ça. À la rigueur tu peux utiliser
les fonctions exportées par le VFS pour ouvrir le fichier,
mais franchement c'est pas recommandé.

Que veux-tu faire avec ton module ?


Thomas
--
/*
* We used to try various strange things. Let's not.
*/
2.2.16 /usr/src/linux/fs/buffer.c