Pointeurs de fontions...

Pointeurs de fontions... - C++ - Programmation

Marsh Posté le 20-02-2003 à 17:22:16    

Bonjour...
Je cherche à faire une fonction "exec()", dans un système d'exploitation monotache fait maison...
Pour cela, je compte charger le fichier en mémoire, et faire un call vers cette fonction...
J'ai testé ceci, mais le compilo me crache dessus :
 

Code :
  1. void exec(char* name)
  2. {
  3. int x=512;
  4. void* temp;
  5. void* (fonction(void));
  6. int fd;
  7. int i=0, j=0;
  8. fd=open(name);
  9. if (fd==-1)
  10. {
  11.  print("Erreur d'exécution\n" );
  12.  return;
  13. }
  14. temp=(void*)kmalloc(x*sizeof(char));
  15. j=read(fd,512,(void*)temp);
  16. while (j!=0)
  17. {
  18.  i+=j;
  19.  x+=512;
  20.  temp=(void*)krealloc((void*)temp,x);
  21.  i+=(j=read(fd,512,(void*)((int)temp)+x-512));
  22. }
  23. temp=(void*)krealloc((void*)temp,i);
  24. fonction=temp;
  25. fonction();
  26. kfree(temp);
  27. }

 
Le compilo me dit ceci :
 

../kernel/kernel.c: Dans la fonction « exec »:
../kernel/kernel.c:47: invalid lvalue in assignment

 
Qqn peut-t-il m'aider ?
Merci :hello:

Reply

Marsh Posté le 20-02-2003 à 17:22:16   

Reply

Marsh Posté le 20-02-2003 à 17:28:18    

void* (fonction(void));
 :non:  
 
void (*fonction)(void)
 
est un pointeur vers une fonction du type "void foo(void)"
 
edit:
- tous les cast vers ou depuis des void* sont inutiles
- sizeof(char)==1 par définition
 
- i+=(j=read(fd,512,(void*)((int)temp)+x-512))
ultra illisible et chiatique
 
-  temp=(void*)krealloc((void*)temp,i);
fonction=temp;
 
pourquoi passer par temp ?
 
- void exec(const char* name)
est bien mieux
 


Message édité par Taz le 20-02-2003 à 17:32:08
Reply

Marsh Posté le 20-02-2003 à 17:39:32    

merci pour ttes ces précisions :jap:
et ça a réussi !!! :)
merci bcp !!!
ciao...
:hello:

Reply

Marsh Posté le 20-02-2003 à 17:41:14    

Le Sot Zi a écrit :

merci pour ttes ces précisions :jap:
et ça a réussi !!! :)
merci bcp !!!
ciao...
:hello:

putain j'avais meme pas fait gaffe que c'etais toi! ton projet avance?

Reply

Marsh Posté le 20-02-2003 à 19:01:53    

++Taz a écrit :

putain j'avais meme pas fait gaffe que c'etais toi! ton projet avance?

oui, comme tu le vois, je suis en train d'exécuter des fonctions externes. Dans 15 jours, j'aurais un mini DOS, si j'arrive à la fin du projet, bien entendu... Je v devoir passer quelques nuits blanches, et je manque vraiement de main d'oeuvre... Le pb, c ke ds 15 jours je dois le présenter en amphi, alors ça va être chaud :'(

Reply

Marsh Posté le 20-02-2003 à 19:03:07    

bon courage

Reply

Marsh Posté le 20-02-2003 à 19:07:30    

++Taz a écrit :

bon courage

merci  :cry:

Reply

Sujets relatifs:

Leave a Replay

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