[C/UNIX] Probleme louche

Probleme louche [C/UNIX] - Programmation

Marsh Posté le 01-03-2002 à 15:20:17    

Voila mon bout de code :
 
int  main(int argc, char **argv)
{
  int  fd;
  int  val;
  struct exec head;
 
  if (argc < 2)
     exit(0);
 
  if ((fd = open(argv[1], O_RDONLY) == -1))
    exit(0);
 
  puts ("avant" );
 
  if ((val = read(fd, &head, sizeof(head))) == -1)
    exit(0);
 
  puts ("apres" );
}
 
Il reste bloque et n'affiche ajmais le "apres".
Help

Reply

Marsh Posté le 01-03-2002 à 15:20:17   

Reply

Marsh Posté le 01-03-2002 à 15:29:47    

puts marche avec des streams si j'ai bon souvenir donc fait un flush à la fin
 
sinon, fait plutot des writes pour ce genre de debug, au moins tu est sûr que si rien n'est affiché, c'est qu'il n'est pas arrivé au write

Reply

Marsh Posté le 01-03-2002 à 15:33:46    

je viens de faire un my_puts, ca change rien :
 
void   my_puts(char *chaine)
{
   write(1, chaine, strlen(chaine));
}

Reply

Marsh Posté le 01-03-2002 à 15:57:50    

elle est dans quel .h ta structure head? (j'ai le flemme de chercher)
 
sinon, tu es sûr de la validité du fichier que tu ouvres?
 
PS: le exit code 0 signifie que ton programme s'est terminé normalement donc je pense qu'un exit(1) serait plus juste (je sais ça ne résoud pas ton problème)
 
PPS: utilises gdb (ou ddd si tu veux du mode graphique)

Reply

Marsh Posté le 01-03-2002 à 17:00:26    

Manegarm a écrit a écrit :

Voila mon bout de code :
 
int  main(int argc, char **argv)
{
  int  fd;
  int  val;
  struct exec head;
 
  if (argc < 2)
     exit(0);
 
  if ((fd = open(argv[1], O_RDONLY) == -1))
   exit(0);
 
  puts ("avant" );
 
  if ((val = read(fd, &head, sizeof(head))) == -1)
    exit(0);
 
  puts ("apres" );
}
 
Il reste bloque et n'affiche ajmais le "apres".
Help  




 
Ca a peut-être rien à voir mais y'aurait pas comme un pb de parenthèse ?!
 
Sinon ça peut venir de ton open et/ou ton read qui sont bloquant ET qui son bloqués qqpart
 
Autre chose, dans tes if il me semble que tu test pas le bon truc. Tel que c'est fait là tu la véracité du = et non pas la valeur de retour de tes fonctions. Fait plutôt comme ça :
 if (read(fd, &head, sizeof(head) == -1)
    exit(0);

 

[jfdsdjhfuetppo]--Message édité par cycojesus--[/jfdsdjhfuetppo]


---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
Reply

Marsh Posté le 01-03-2002 à 18:12:51    

j'ai peut etre pas tout suivi mais pourkoi tu fais po un printf plutot kun puts???
si tu fais un printf("apres\n" );
ya des chances pourkil l'affiche ton "apres" et ke tu te rende compte ke l'erreur vienne dot part.....

Reply

Marsh Posté le 01-03-2002 à 21:24:38    

Dj_jim a écrit a écrit :

j'ai peut etre pas tout suivi mais pourkoi tu fais po un printf plutot kun puts???
si tu fais un printf("apres\n" );
ya des chances pourkil l'affiche ton "apres" et ke tu te rende compte ke l'erreur vienne dot part.....



printf ou puts, il faut mettre un fflush(stdout) pour être sûr que ce soit affiché.

Reply

Marsh Posté le 02-03-2002 à 13:26:05    

Jar Jar a écrit a écrit :

 
printf ou puts, il faut mettre un fflush(stdout) pour être sûr que ce soit affiché.  




non non des fois les \n a la fin d'un chaine de caracteres forcent l'affichage.

Reply

Sujets relatifs:

Leave a Replay

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