Advertisement
HappyPotato18

Pipe

Apr 23rd, 2020
624
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.61 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <dirent.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <sys/wait.h>
  7. #include <errno.h>
  8. #define MSGSIZE 512
  9.  
  10. int main()
  11. {
  12.     char inbuf[MSGSIZE];
  13.     int p[2], pid, nbytes, filesize, filepos;
  14.     DIR           *d;
  15.     struct dirent *dir;
  16.     FILE *curr;
  17.     FILE *new;
  18.     int status;
  19.     char *filename;
  20.     char *bytes = (char *)calloc(MSGSIZE,sizeof(char));
  21.  
  22.     if (pipe(p) < 0)
  23.     {
  24.         exit(1);
  25.     }
  26.  
  27.         int i = chdir("/home/ira/osisp/6/images/test");
  28.     d = opendir( "." );
  29.  
  30.     if( d == NULL )
  31.     {
  32.         printf("Cannot open dir");
  33.             exit(EXIT_FAILURE);
  34.     }
  35.  
  36.     while( ( dir = readdir( d ) ) )
  37.     {
  38.  
  39.             if( strcmp( dir->d_name, "." ) == 0 ||
  40.             strcmp( dir->d_name, ".." ) == 0 )
  41.             {
  42.             continue;
  43.             }
  44.         filename = dir->d_name;
  45.         printf("%s \n",filename);  //do not fgt
  46.         curr = fopen(dir->d_name,"rb");
  47.         if (curr == NULL)
  48.         {
  49.                 printf("Error opening file");
  50.                 exit(EXIT_FAILURE);
  51.             }
  52.        
  53.         fseek(curr,0, SEEK_END);
  54.         filesize = ftell(curr);
  55.         fseek(curr,0,SEEK_SET);
  56.        
  57.         filepos =0;
  58.         while(filepos != filesize)
  59.         {
  60.             if(filesize-filepos > MSGSIZE)
  61.             {
  62.                 fread(bytes,sizeof(char), MSGSIZE, curr);
  63.                 write(p[1], bytes, MSGSIZE);
  64.                 filepos = filepos + MSGSIZE;   
  65.             }
  66.             else
  67.             {
  68.                 fread(bytes,sizeof(char),filesize-filepos,curr);
  69.                 write(p[1], bytes, filesize-filepos);
  70.                 fclose(curr);
  71.                 //printf("Wrote 1 file \n");
  72.                 break;
  73.             }      
  74.  
  75.         }
  76.  
  77.  
  78.         //if((pid = fork()) > 0)
  79.         //{
  80.         //  waitpid(-1,&status,WUNTRACED);
  81.         //}
  82.        
  83.         pid_t pid = fork();
  84.         //if(pid > 0 )
  85.         //{
  86.         //  wait(&status); 
  87.         //}
  88.         if(pid == 0)
  89.         {
  90.             int reading_bytes = 0;
  91.             chdir("/home/ira/osisp/6/images/out");
  92.             new = fopen(filename,"wb");
  93.             while(reading_bytes != filesize)
  94.             {
  95.                 if(filesize-reading_bytes > MSGSIZE)
  96.                 {  
  97.                
  98.                     read(p[0], bytes, MSGSIZE);
  99.                     fwrite(bytes,sizeof(char),MSGSIZE,new);
  100.                     reading_bytes = reading_bytes + MSGSIZE;   
  101.                 }
  102.                 else
  103.                 {
  104.                     read(p[0], bytes,filesize-reading_bytes);
  105.                     fwrite(bytes,sizeof(char),filesize-reading_bytes,new);
  106.                     fclose(new);
  107.                     char *path = (char *)calloc(40,sizeof(char));
  108.                     strcpy(path,"/home/ira/osisp/6/images/out");
  109.                     strcat(path,filename);
  110.                     int i =execl("select_channel"," ",path, NULL);
  111.                     printf("%d \n", i);
  112.                     printf("%d \n", errno);
  113.                     //printf("Red 1 file \n");
  114.                     break;
  115.    
  116.                 }          
  117.  
  118.             }
  119.            
  120.             exit(0);   
  121.  
  122.         }
  123.  
  124.        
  125.     }
  126.    
  127.     //if ((pid > 0) && (WIFEXITED(status)) )
  128.         //{
  129.     //  while(wait(&status) != -1);
  130.            
  131.         //}
  132.    
  133.     return 0;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement