Advertisement
KappaMike

Horodinca Mihai A2 MyTr

Apr 1st, 2020
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.28 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include <string.h>
  6. #include <fcntl.h>
  7. #include <errno.h>
  8. #include <linux/limits.h>
  9. #include <sys/stat.h>
  10. #include <sys/types.h>
  11.  
  12. int main(int argc, char *argv[])
  13. {
  14.   struct stat st, oldmods;
  15.  
  16.   int fd_intrare, fd_iesire;
  17.   char cmd;
  18.  
  19.   if (argc < 5)
  20.   {
  21.     printf("nr insuficient de argumente");
  22.     exit(1);
  23.   }
  24.  
  25.   if (-1 == (fd_intrarea = open(argv[1], O_RDONLY)))
  26.   {
  27.     perror("Eroare la deschiderea fisierului de intrare");
  28.     exit(2);
  29.   }
  30.  
  31.   stat(argv[2], &oldmods);
  32.   if (0 == access(argv[2], F_OK))
  33.   {
  34.     if (-1 == access(argv[2], W_OK))
  35.     {
  36.       printf("Vrei sa-i dai drept de scriere? y n");
  37.       scanf(" %c", &cmd);
  38.       if (cmd == 'n' || cmd == 'N'){
  39.         exit(3);
  40.       }
  41.       else if (cmd == 'y' || cmd == 'Y')
  42.       {
  43.         chmod(argv[2], oldmods.st_mode | S_IRUSR | S_IWUSR);
  44.       }
  45.       else
  46.       {
  47.         printf("Daca nu pot scrie fisierul nu mai am ce face");
  48.         exit(3);
  49.       }
  50.     }
  51.     printf("Vrei sa il suprascrii? Y sau N?");
  52.     scanf(" %c", &cmd);
  53.     if (cmd == 'y' || cmd == 'Y')
  54.     {
  55.       fd_iesire = open(argv[2], O_WRONLY | O_TRUNC);
  56.     }
  57.     else
  58.     {
  59.       fd_iesire = open(argv[2], O_WRONLY | O_APPEND);
  60.     }
  61.   }
  62.   else
  63.       if (-1 == (fd_iesire = creat(argv[2], oldmods.st_mode | S_IWUSR | S_IRUSR)))
  64.   {
  65.     perror("Eroare la apelul creat");
  66.     exit(3);
  67.   }
  68.  
  69.   int codRead;
  70.   char bufferIn[PATH_MAX], bufferOut[PATH_MAX];
  71.   char *pBufferIn, *pBufferOut;
  72.  
  73.   while (0 != (codRead = read(fd_intrare, bufferIn, PATH_MAX)))
  74.   {
  75.     if (-1 == codRead)
  76.     {
  77.       perror("Eroare la apelul read");
  78.       exit(4);
  79.     }
  80.     pBufferIn = bufferIn;
  81.     pBufferOut = bufferOut;
  82.  
  83.     for (size_t i = 0; i < codRead; i++, pBufferIn++)
  84.     {
  85.       if (*pBufferIn == argv[3][0])
  86.       {
  87.         *pBufferOut = argv[4][0];
  88.       }
  89.       else
  90.       {
  91.         *pBufferOut = *pBufferIn;
  92.       }
  93.       pBufferOut++;
  94.     }
  95.     *pBufferOut = '\0';
  96.     if (-1 == write(fd_iesire, bufferOut, strlen(bufferOut)))
  97.     {
  98.       perror("Eroare la apelul write");
  99.       exit(5);
  100.     }
  101.   }
  102.   if (close(fd_intrare) == -1)
  103.     exit(6);
  104.   if (close(fd_iesire) == -1)
  105.     exit (7);
  106.   printf("Done!");
  107.   return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement