Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1237 connectés 

 


Dernière réponse
Sujet : "Passage" de descpteur de fichier ?
NoBlue thanks :)

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
NoBlue thanks :)
mystereetbouledegomme I see. Ok si tu as besoin du moindre conseil sur les sharde memory je t'en prie...
NoBlue DUT "diplome universitaire de technologie".
(Je suis née près de bruxelles)
mystereetbouledegomme DUT=?
Je suis a l'ULB(Universit Libre de Bruxelles en Belgique donc) et je fais une maitrise en informatique.
NoBlue Je suis à créteil(94) en Miage et j'ai un DUT info. :)
et toi ?
mystereetbouledegomme toi aussi :-) tu etudie ou?  :??:
NoBlue je pense que ta raison car je me souviens d'avoir étudié ces histoire de table y a 2-3 ans :(
mystereetbouledegomme Exactement, enfin c'est mobn avis perso peut etre que ca n'a rien avoir.
NoBlue très clair j'ai pigé mon pb.
pour l'instant j'ai donné a tous les fils tous les "n° de UFDT" et ce qu'il me manque c'est le "File Table".
quel misère ce truc :)
mystereetbouledegomme Je pense que la raison est la suivante :  
Tu as un premier truc qu'il s'appelle la File Table c'est la que sont stockes lespointeurs vers les inodes et le file offset ... Ensuite tu as la User File Descriptor Table, la sont stocke les pointeurs vers la FT. Donc quand tu donnes un n° de UFDT a un autre fils cette entree de la UFDT ne pointera pas forecement vers la meme entree de la FT. J'espere que c'est clair.
mystereetbouledegomme Je pense que la raison est la suivante :  
Tu as un premier truc qu'il s'appelle la File Table c'est la que sont stockes lespointeurs vers les inodes et le file offset ... Ensuite tu as la User File Descriptor Table, la sont stocke les pointeurs vers la FT. Donc quand tu donnes un n° de UFDT a un autre fils cette entree de la UFDT ne pointera pas forecement vers la meme entree de la FT. J'espere que c'est clair.
NoBlue ce que je pige pas c'est pkoi si je donne le bon descpripteur au processus fils celui n'arrive pas à lire dedans ?
mystereetbouledegomme Ben le probleme c'est que je voit pas tres bien comment faire d'autre a moins de passer par des pipes nommes.
NoBlue ok je boot sous linux
on m'avait déjà un peu parler des ces fonctions mais j'étais pas très chaud mais bon si j'ai pas le choix.
mystereetbouledegomme Apparement on est d'accord. Il y a deux mois j'ai fait un petit soft avec des copains. On utilisait la memoire partagee afin d'avoir une base de donnees (un graphe en fait) commune a plusieurs porcessus issu du meme pere et ca marchait plutot bien enfin cette la partie consultation/traitement marchait bien.  
 
Je te detaillerai le procede ce soir ou demain car la j'ai pas trop le temps. Mais si tu veux deja commence sache que ce que tu as besoin c'est de faire des man sur les syscall suivant : shmget(creation d'une memoire partagee) shmat(attachement d'une mem partagee),shmdt(detachement d'uns shm)
NoBlue Mystereetbouledegomme> je suis preneur de ton idée mais j'y connais rien la dedans.
On est bien d'accord que le but est que plusieures processus "fils" créé avec un "fork" puisse avoir accès au meme descripteur.
(je travaille avec des descripteurs socket)
 
=> j'attend ton aide pour la/les fonctions pour "vecteur en memoire partagee"
mystereetbouledegomme Theoriquement sous les systemes UNIX tout est duplique (enfin presque) a partir du moment ou tu ecris qq chose (avant un exec)ds la memoire. En effet la plupart du temps on fait un fork et puis un exec donc ce serait inutile de toujours dupliquer. On fait du "copy on write"  
Pour partager tes descripteurs moi je metrais un vecteur en memoire partagee, ce vecteur contiendrait les indices de ta UFDT. Voila comment je pense qu'on peut faire... Si tu y vois un inconvenient dis le moi et on tachera de trouver autre chose ensemble :-)   :D
NoBlue Mystereetbouledegomme> "Euh normalement les fichier ouvert par un pere sont accessible par le fils"
=> entierement d'accord mais mon pb c'est entre fils ?
 
"La memoire partagee n'est JAMAIS duplique "
duplique = fork
partage = le reste
non ?
 
pas de soluce pour mon pb de partage de descripteur de fichier entre plusieurs processus fils créé par un fork ?
mystereetbouledegomme Euh normalement les fichier ouvert par un pere sont accessible par le fils. Enfin je suis presque sur que oui. Sinon tu peux pas utiliser des pipes nommés ou anonyme(plutot anonyme car tu joues avec des fils et des peres)?
noblue->La memoire partagee n'est JAMAIS duplique d'ou le nom, en effet tu as des commandes du genre shmget,shmat,shmdt qui t'attache des zone de memoire qui seront communes a tout les processus qui attacheront cette zone de memoire. Pour info plus clair fais un man sur l'une de ses memoire. N'oublie pas d'associer un semaphore a chaque memoire partagee sinon tu risque des access concurent...
NoBlue Verdoux > ok j'ai echanger tous les descripteurs entres tous les processus mais après "pour pouvoir chacun créer les descripteurs correspondants. " je dois faire quoi ?? => commande dup ou ??
 
nnovic> le pb du fork c'est que pas de mem partagé mais dupliqué :(
nnovic ... ou alors de placer cette information dans une zone de mémoire partagée !
verdoux Je ne pense pas que ce soit possible directement. A la limite il faut que les processus s'échangent entre eux les nomns des fichiers pour pouvoir chacun créer les descripteurs correspondants.
 
Mais si tu as besoin de pas mal de communication entre tes tâches, il doit être intéressant de créer plutôt des threads que des processus. Les threads partagent notamment la table des descripteurs.
NoBlue hum c'est un exemple, le descripteur c'est linux qui me le donne  
=> j'ai pas du etre très clair ?
nnovic A mon avis, ce qui ne fonctionne pas c'est que tu ne peux pas être sûr qu'après 5, le prochain descripteur de fichier disponible sera 6...
NoBlue voilà mon pb:
 
j'ouvre un descripteur de fichier ex : 5
je fais un fork et donc le fils1 herite du desc 5.
j'ouvre un autre descripteur de fichier ex : 6
je fais un autre fork et donc le fils2 herite du desc 5 et 6.
ensuite je veux que le fils1 ecrive dans le desc 6 et ca foire :(
(write(6,"salut" );pour le fils  et read(6,...); pour un autre prog)
 
=> normal que ca marche pas? je dois faire quelque chose pour que le premier fils "herite" du deuxième desc (6) ??  
ou ca devrait marcher et c'est moi qui me plante ?

Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR