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

 


Dernière réponse
Sujet : [Shell] tee mais sans la sortie standard
Roswell_ Merci, je savais pas qu'on pouvait utiliser open() (ou plutot creat() pour moi) directement avec les pipes, ce qui m'évite de faire un processus pour l'écriture du fichier.

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
Roswell_ Merci, je savais pas qu'on pouvait utiliser open() (ou plutot creat() pour moi) directement avec les pipes, ce qui m'évite de faire un processus pour l'écriture du fichier.
Suri

Roswell_ a écrit a écrit :

vla le prog, il fait une sauvegarde d'un bdd mysql avec la date du jours.
 

Code :
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. [...]

 




 
j'ai la flemme de lire ton code mais une redirection genre "ls > toto" a faire en C c'est pas si dur...
bon je connais pas tee, mais si tu veux juste mettre le ls ds le fichier toto (ls > toto) ya ca:
tab[0] = ls
tab[1] = '>'
tab[2] = toto.txt
 
 
void main(int argc, char **argv, char **env)
{
if ((pid = fork()))
   redirect(tab, env);
waitpid(pid,0,0);
}
 
void redirect(char **tab, char **env)
{
int fd;
if ((fd = open(tab[2],...) == -1)
  error;
dup2(fd, 1);
execve(tab[0], tab, env);
close(fd);
}
 
 
 
voila en gros...
les man a lire: dup2, pipe, fork.... pour bien tout capter...
enfin les redirections ds un programme c pas si dur..

Roswell_ vla le prog, il fait une sauvegarde d'un bdd mysql avec la date du jours.
 

Code :
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. int main(int n,char** argv)
  4. {
  5. int pipe1[2],pipe2[2];
  6. char *buff, *nom;
  7. if(n<2)
  8. {
  9.  printf("utilisation: save_db <bdd>\n" );
  10.  exit(-1);
  11. }
  12. pipe(pipe1);
  13. if(fork()==0)
  14. {
  15.  close(1);
  16.  dup(pipe1[1]);
  17.  execlp("/bin/date","date","+%A",NULL);
  18.  exit(-1);
  19. }
  20. else
  21. {
  22.  wait(NULL);
  23.  close(pipe1[1]);
  24.  buff = (char*)malloc(18*sizeof(char));
  25.  read(pipe1[0],buff,18);
  26.  nom=(char*)malloc(20*sizeof(char));
  27.  buff[strlen(buff)-1]='.';
  28.  sprintf(nom,"%ssql",buff);
  29.  free(buff);
  30.  buff=NULL;
  31.  pipe(pipe2);
  32.  if(fork()==0)
  33.  {
  34.   close(1);
  35.   dup(pipe2[1]);
  36.   close(pipe2[1]);
  37.   execlp("/usr/local/bin/mysqldump","mysqldump",argv[1],"-u****","-p****",NULL);
  38.   exit(-1);
  39.  }
  40.  else
  41.  {
  42.   //wait(NULL); pour que cela ce fasse au fur et a mesure
  43.   close(pipe2[1]);// pour que le pipe se bloc et attende
  44.   close(0);
  45.   dup(pipe2[0]);
  46.   //close(1); sinon marche pas
  47.   execl("/usr/bin/tee","tee",nom,NULL);
  48.   return 0;
  49.  }
  50. }
  51. }

sombresonge et quelle est le problème de '>' dans un prog :??:  
 
Sinon ya toujour moyen de détourner la sortie standard en branchant le flux stdout sur un fichier...
Roswell_ Bon vous voyer comment marche tee.
On fait 'ls | tee test.txt'
il met le resultat du ls dans un fichier test.txt et l'affiche à l'écran.
Moi je vousrais la même chose sans qu'il me l'affiche, je connais pas bcp linux mais ça doit exister.
Je precise que je ne veux pas utiliser l'opérateur '>' du shell. En fait c'est pour utiliser dans un prog.

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)