HappyPotato18

ЛАБА6

Apr 23rd, 2020
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.32 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"); // путь к папке с картинками(335)
  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);  // ДАЖЕ ЗДЕСЬ НЕ ВСЕ ИМЕНА ФАЙЛОВ ВЫВОДИТ????????????????????????????
  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.        
  79.         if(pid == 0)
  80.         {
  81.             int reading_bytes = 0;
  82.             chdir("/home/ira/osisp/6/images/out");   // путь для выходных изображений
  83.             new = fopen(filename,"wb");
  84.             while(reading_bytes != filesize)
  85.             {
  86.                 if(filesize-reading_bytes > MSGSIZE)
  87.                 {  
  88.                
  89.                     read(p[0], bytes, MSGSIZE);
  90.                     fwrite(bytes,sizeof(char),MSGSIZE,new);
  91.                     reading_bytes = reading_bytes + MSGSIZE;   
  92.                 }
  93.                 else
  94.                 {
  95.                     read(p[0], bytes,filesize-reading_bytes);
  96.                     fwrite(bytes,sizeof(char),filesize-reading_bytes,new);
  97.                     fclose(new);
  98.                     //printf("Red 1 file \n");
  99.                     break;
  100.    
  101.                 }          
  102.  
  103.             }
  104.            
  105.             exit(0);   
  106.  
  107.         }
  108.  
  109.        
  110.     }
  111.    
  112.    
  113.     return 0;
  114. }
Add Comment
Please, Sign In to add comment