begin process at 2010 03 17 05:00:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

Fichier & Disque

 > 

ouvir un fichier à partir d'un inode


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

ouvir un fichier à partir d'un inode

jeudi 31 août 2006 à 23:37:48 | ouvir un fichier à partir d'un inode

nico_fip1

Bonsoir,
Je travaille actuellement sur un système QNX (type UNIX et POSIX)
Si j'ai bien compris, les fichiers d'un dossiers sont gérés par une liste chainée. En effet, lorsque je fais un
char[100] sFicher ;
for(i=0;i<10000;i++)
{
    sprintf(sFichier,"%d.txt", i)   
    FILE* fichier=fopen(sFichier);
    fclose(fichier);
}


l'opération est de plus en plus longue.

j ai découvert une librairie, <dirent.h>, avec laquelle je peux parcourir, succecivement, tous les fichiers d'un dossier. Je récupère alors l'Inode du fichier.
Est il possible, à partir de ce Inode, d'ouvrir le fichier dans repasser par le nom et la fonction fopen  ?

Merci d'avance pour votre réponses.

    Nico
Strasbourg
France
vendredi 1 septembre 2006 à 01:39:38 | Re : ouvir un fichier à partir d'un inode

AlexN

un inode ou index node est une structure de données contenant les propriétés d'une entrée dans le système de fichier.
A un fichier ou référence (path) correspond un et un seul inode.
Par contre à un inode correspond 1 à n références (regardes la fonction ln).
Par conséquent, si on utilisait les inodes avec les primitives de manipulation de fichier (fopen...), le système ne saurait pas quelle référence (fichier) utiliser.
vendredi 1 septembre 2006 à 01:46:25 | Re : ouvir un fichier à partir d'un inode

AlexN

Pardon de 0 à n et non de 1 à n, un inode peut exister sans qu'il corresponde à une reférence dans le système de fichier.
vendredi 1 septembre 2006 à 08:39:14 | Re : ouvir un fichier à partir d'un inode

nico_fip1

Merci pour cette réponse....

Si j'ai bien compris, on a 1 inode pour 1 fichier (fichier = données palcées physiquement sur le disque).

Le fonction "opendir" de la librairie <dirent.h>, me retourne une structure "dossier" à partir de laquelle, je peux appeler la fonction "readdir". Celle ci, appelée en boucle, va avancer dans le dossier, en me donnant une structure sur un fichier. Cette structure "dirent" comprorte entre autre, comme champs, le nom du fichier et son inode.

Si de là, je fais appel à la fonction fopen, le système va refaire la correspondance entre le nom du ficher, et son inode, pour retouver l'emplacement physique.
N'est-il donc pas possible, d'ouvrir un fichier directement avec l'inode, pour éviter cette manipulation ?

Si mon explication est fausse, n'hésitez pas à me le signaler; et si vous avez des liens expliquant les système sde fichiers.

Merci

    Nico
Strasbourg
France
vendredi 1 septembre 2006 à 11:19:32 | Re : ouvir un fichier à partir d'un inode

AlexN

Nope,

A une inode peut correspondre 0 à n référence (chemin menant à un fichier). La même inode peut être référencée par plusieurs chemins dans le système de fichier.
Exemple, soit le fichier :
/home/machin/toto.txt
on tape la commande suivante :
ln toto.txt toto2.txt
Si on fait un ls -al, on se retrouve avec deux fichiers aux caractéristiques et au contenu identiques. Et si on modifie toto2.txt, on modifie toto.txt. Car les deux références correspondent à la même inode.
Par contre à toto.txt ne correspond qu'une et une seule inode, et à toto2.txt correspond une et une seule inode. Et en fait c'est la même inode pour les deux.
La propriété des inodes fait que les deux références sont totalement équivalentes mais "indépendantes" (d'un point de vue référence, pas concernant les blocs de données) :
rm toto.txt
Il ne reste plus que toto2.txt.
On n'a pas supprimé l'entrée d'inode car il reste encore une référence sur elle (toto2.txt)

Le fonction "opendir" de la librairie <dirent.h>, me retourne une structure "dossier" à partir de laquelle, je peux appeler la fonction "readdir". Celle ci, appelée en boucle, va avancer dans le dossier, en me donnant une structure sur un fichier. Cette structure "dirent" comprorte entre autre, comme champs, le nom du fichier et son inode.

Oui

Si de là, je fais appel à la fonction fopen, le système va refaire la correspondance entre le nom du ficher, et son inode, pour retouver l'emplacement physique.

Oui

N'est-il donc pas possible, d'ouvrir un fichier directement avec l'inode, pour éviter cette manipulation ?

Toujours pas puisque qu'à une inode peut correspondre plusieurs références.
Ainsi avec l'exemple precédent, si fopen acceptait comme paramètre l'inode, quel fichier faudrait-il ouvrir ? toto.txt ou toto2.txt ? Tandis que fopen(toto.txt), le système sait de quel fichier il s'agit (il a sa vrai référence d'un point de vue utilisateur).

Consultes le fichier d'entête sys/types.h ou sys/stat.h pour la structure d'une inode.
Consultes le fichier d'entete dirent.h pour plus d'infos sur la structure dirent.
Rien ne vaut un petit détour dans les sources du noyau pour comprendre.


Cette discussion est classée dans : fichier, partir, fichiers, ouvir, inode


Répondre à ce message

Sujets en rapport avec ce message

problèmes liens entre fichiers C et C++ dans un projet Visual C++ 6.0 [ par nico ] J'ai récupéré un projet contenant des fichiers écrits en C. Le fichier "principal" de ce projet également écrit en C fait appel à des fonctions se tro créer un arbre à partir d'un fichier word [ par yeager ] Bonjour je suis nouveau et débutant en langage CJe souhaite pouvoir lire un fichier word comportant des informations sur plusieurs livres. A partir de Lancer un autre fichier à partir d'un prog en C++ [ par trinitacs ] J'aimerai lancer un .bat à partir de mon prog en C++. Coment dois-je faire?Est-ce que le .bat peut s'éxécuetr de manière différentes suivant la manièr [Visual C++] Aide fichiers exe [ par WarioZ ] bonjour a tous,je débute en C++ et j'ai un probleme avec les fichiers exe que je cree a partir de mes codes sources...Quand je les execute a partir de pb visual c++ fichiers [ par pichu ] dans une fonction de visual j'ouvre un fichier fstream en lecture. Ce fichier contient des informations. Mais ca me renvoie true quand j'affiche le ré aide sur les fichiers [ par dickymoe ] VinceExiste-t-il une fonction permettant de savoir si un fichier existe ?et une autre permettant de savoir si un fichier est vide ?merci créer un fichier .mdb à partir d'un pg Cplus plus [ par cvi ] Créer un fichier .mdb vierge et l'enregistrer dans l'arborescence à partir d'un bouton. Est ce que je pourrai avoir les lignes de code SVP.Merci et à recherche fichiers executables et comparaisons [ par limsa033 ] Bonsoir,je cherche à lister tous les fichiers executables d(un disque dur ainsi que leur principales caractéristiques(nom,chemin et taille et date de problème avec fichiers !!! [ par ben01n ] salut tout le mondeje prog sous linux et j'aurais besoin d'aide pour un de mes programmes dont j'ai déposé la source sous le nom "client-serveur en ud Acquisition de Données a partir d'un fichier texte [ par madcow41 ] 'lutBon j'ai un fichier qui contient des lignes formées ainsi :123.145.569.188 - - [12/Apr/2001:00:08:49 +0200] "GET /pagehtml.htm HTTP/1.x" et le res


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,281 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales