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

 


Dernière réponse
Sujet : [C/UNIX] Probleme louche
Dj_Jim

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.


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
Dj_Jim

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.

Jar Jar

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

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

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]

Titoine42 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)
manegarm je viens de faire un my_puts, ca change rien :
 
void   my_puts(char *chaine)
{
   write(1, chaine, strlen(chaine));
}
Titoine42 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
manegarm 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

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