"Passage" de descpteur de fichier ?

"Passage" de descpteur de fichier ? - Programmation

Marsh Posté le 22-04-2001 à 11:37:33    

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 ?

Reply

Marsh Posté le 22-04-2001 à 11:37:33   

Reply

Marsh Posté le 22-04-2001 à 14:02:27    

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...

Reply

Marsh Posté le 22-04-2001 à 14:05:03    

hum c'est un exemple, le descripteur c'est linux qui me le donne  
=> j'ai pas du etre très clair ?

Reply

Marsh Posté le 22-04-2001 à 14:21:37    

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.

Reply

Marsh Posté le 22-04-2001 à 15:12:47    

... ou alors de placer cette information dans une zone de mémoire partagée !

Reply

Marsh Posté le 22-04-2001 à 15:21:59    

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é :(

Reply

Marsh Posté le 22-04-2001 à 15:35:28    

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...

Reply

Marsh Posté le 22-04-2001 à 16:17:07    

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 ?

Reply

Marsh Posté le 22-04-2001 à 16:23:18    

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

Reply

Marsh Posté le 22-04-2001 à 16:39:23    

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"

Reply

Marsh Posté le 22-04-2001 à 16:39:23   

Reply

Marsh Posté le 22-04-2001 à 16:47:08    

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)

Reply

Marsh Posté le 22-04-2001 à 16:50:25    

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.

Reply

Marsh Posté le 22-04-2001 à 16:52:28    

Ben le probleme c'est que je voit pas tres bien comment faire d'autre a moins de passer par des pipes nommes.

Reply

Marsh Posté le 22-04-2001 à 17:05:32    

ce que je pige pas c'est pkoi si je donne le bon descpripteur au processus fils celui n'arrive pas à lire dedans ?

Reply

Marsh Posté le 22-04-2001 à 17:10:52    

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.

Reply

Marsh Posté le 22-04-2001 à 17:10:57    

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.

Reply

Marsh Posté le 22-04-2001 à 17:20:10    

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 :)

Reply

Marsh Posté le 22-04-2001 à 17:21:34    

Exactement, enfin c'est mobn avis perso peut etre que ca n'a rien avoir.

Reply

Marsh Posté le 22-04-2001 à 17:29:03    

je pense que ta raison car je me souviens d'avoir étudié ces histoire de table y a 2-3 ans :(

Reply

Marsh Posté le 22-04-2001 à 17:31:14    

toi aussi :-) tu etudie ou?  :??:

Reply

Marsh Posté le 22-04-2001 à 17:35:50    

Je suis à créteil(94) en Miage et j'ai un DUT info. :)
et toi ?

Reply

Marsh Posté le 22-04-2001 à 17:40:40    

DUT=?
Je suis a l'ULB(Universit Libre de Bruxelles en Belgique donc) et je fais une maitrise en informatique.

Reply

Marsh Posté le 22-04-2001 à 17:51:51    

DUT "diplome universitaire de technologie".
(Je suis née près de bruxelles)

Reply

Marsh Posté le 22-04-2001 à 18:11:05    

I see. Ok si tu as besoin du moindre conseil sur les sharde memory je t'en prie...

Reply

Marsh Posté le 22-04-2001 à 18:12:43    

thanks :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed