fopen et son handle

fopen et son handle - C - Programmation

Marsh Posté le 02-09-2004 à 16:07:17    

une question que jme pose :  
 
si un process quelconque utilise le meme handle qu'un autre pour fwrite par exemple est ce que cela va fonctionner ???  

Code :
  1. process1
  2. FILE *f=fopen


Code :
  1. process2
  2. fwrite( f du process1);


bon il existe dautre methode pour faire se genre de truc mais c juste un question comme ca en passant :whistle:


Message édité par red faction le 02-09-2004 à 16:07:27
Reply

Marsh Posté le 02-09-2004 à 16:07:17   

Reply

Marsh Posté le 02-09-2004 à 16:55:17    

je suppose que ca dépend de l'implémentation ... sous windows par exemple quand tu utilises CreateProcess, tu peux choisir si le fils hérite des handles du père.


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 02-09-2004 à 17:05:46    

ça hérite des descripteurs de fichiers certes (sous *n*x du moins) mets tu récupères pas les FILE* et ho !

Reply

Marsh Posté le 03-09-2004 à 11:50:34    

beh sous nux si il récupéres une copie des FILE * si il ne fais que un fork et pas de exec***
 
Mais tu risques d'avoir un prob de syncrho lock ?

Reply

Marsh Posté le 03-09-2004 à 12:35:41    

sous win 32 par exemple jme demandait ce que pouvais faire un tel truc :
(taz ferme les yeux)

Code :
  1. for(int i=0;;i++){
  2.    send(i,buf,sizeof(buf),0);
  3. }


Message édité par red faction le 03-09-2004 à 15:18:22
Reply

Marsh Posté le 03-09-2004 à 12:59:48    

BlackGoddess a écrit :

je suppose que ca dépend de l'implémentation ... sous windows par exemple quand tu utilises CreateProcess, tu peux choisir si le fils hérite des handles du père.


Il est important de préciser que les handle sont dupliqués, sauf s'ils ont été rendu non duplicables. Si le process fils ferme son handle, celui du père n'est pas affecté et vice versa.
En ce qui concerne FILE* y'a aucune duplication, ca fait partie de la lib standard et c'est propre à chaque process. Quant à ce que fait ton code, ben send c'est du rézo non ? Y'a pas de FILE* la dedans.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 03-09-2004 à 13:34:36    

En ce qui concerne FILE* y'a aucune duplication, ca fait partie de la lib standard et c'est propre à chaque process. Quant à ce que fait ton code, ben send c'est du rézo non ? Y'a pas de FILE* la dedans.
 
 
Sous nux tout est hériter meme le FILE* , le fork crée une copie conforme du pere la seule chose qu'il duplique pas etant son numéro de pid, les signaux pendant , ls temps de consommation cpu user et kernel sont réinitialiser puis peut etre 2-3 bricoles encores comme les verrous sur les fichiers...
 
C'est quoi l'os sur lequel tu bosses ? Parce que en effet sous windows c different

Reply

Marsh Posté le 03-09-2004 à 16:30:16    

j'ai une petite question sur le meme sujet.
Imaginons que j'ouvre un fichier en ecriture et que je fork.
j'imagine que le pere et le fils ne vont pas pouvoir ecrire en meme temps dans le fichier, alors qu'est se qu'il se passe ?

Reply

Marsh Posté le 03-09-2004 à 16:33:21    

j'ai une petite question sur le meme sujet.  
Imaginons que j'ouvre un fichier en ecriture et que je fork.  
j'imagine que le pere et le fils ne vont pas pouvoir ecrire en meme temps dans le fichier, alors qu'est se qu'il se passe ?  
/////////////////////////////////////////////////////////
Typiquement une desynchro tu risques de pas avoir ce que tu crois dans le fichier.
Chacun ecrivant dans le fichier en meme temps ca veut dire que celui qui a la cpu ecrit des qu'il est preempté meme si il a pa finir d'ecrire l'autre vient ecrire et ca fout le zouc
En gros , utilise les verrous

Reply

Marsh Posté le 03-09-2004 à 16:35:07    

ok, merci

Reply

Sujets relatifs:

Leave a Replay

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