[Shell] tee mais sans la sortie standard

tee mais sans la sortie standard [Shell] - Programmation

Marsh Posté le 29-09-2001 à 02:20:46    

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.

Reply

Marsh Posté le 29-09-2001 à 02:20:46   

Reply

Marsh Posté le 29-09-2001 à 02:52:21    

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

Reply

Marsh Posté le 29-09-2001 à 12:16:05    

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

Reply

Marsh Posté le 29-09-2001 à 13:00:50    

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


---------------
Suri.morkitu.org : Balades au coeur de la ville...
Reply

Marsh Posté le 29-09-2001 à 23:07:57    

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.

Reply

Sujets relatifs:

Leave a Replay

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