Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2019
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.20 KB | None | 0 0
  1. /* Autor: Lucas Renato Fidalgo */
  2.  
  3. #include <stdio.h> // printf(), scnaf(), fopen(), etc.
  4. #include <stdlib.h> // EXIT_SUCCESS , EXIT_FAILURE
  5. #include <string.h> // strcmp()
  6.  
  7. void shuffle(char [*], size_t);
  8.  
  9. int main(int argc, char* argv[])
  10. {
  11.     srand(8);
  12.  
  13.     if (argc == 1) {
  14.         puts("Numero de parametros insuficientes!");
  15.         printf("Digite: %s help\n", argv[0]);
  16.         puts("Para entender como executar o programa.");
  17.         return EXIT_FAILURE;
  18.     } else if (strcmp(argv[1], "help") == 0) { // para ajudar o usuario a utilizar o programa.
  19.         puts("Parametros necessarios para se executar o programa sao:");
  20.         puts("1.O nome do arquivo que deseja utilizar na operacao (se desejar tambem coloque o path do arquivo)");
  21.         puts("2.O nome do arquivo que sera gerado na operacao.");
  22.         puts("3.A operacao que deseja fazer (exemplo: -R)");
  23.         puts("4.Caso a operacao for -E, informar um numero para ser o tamanho do grupo de bytes a serem embaralhados.");
  24.         puts("5.Caso a operacao for -E digitar um numero para servir como seed.");
  25.         printf("Tipos de operacao: -E para embaralhar o conteudo de um arquivo e -R para recuperar o conteudo de um arquivo embaralhado.\n\n");
  26.         puts("Exemplo:");
  27.         printf("%s origem.txt embaralhado.txt -E 8\n", argv[0]);
  28.         return EXIT_FAILURE;
  29.     } else if (argc < 3) { // caso tiver apenas dois parametros e o segundo parametro nao for 'help'
  30.         printf("Numero de parametros insuficientes!\n");
  31.         puts("Digite: ");
  32.         printf("%s help\n", argv[0]);
  33.         puts("Para entender como executar o programa.");
  34.         return EXIT_FAILURE;
  35.     }
  36.  
  37.     if (strcmp(argv[3], "-E") == 0) {
  38.         char *buffer;
  39.         long tamanho;
  40.  
  41.         FILE* origem = fopen(argv[1], "rb");
  42.         if (origem == 0) {
  43.             perror("Nao foi possivel abrir arquivo especificado!");
  44.             return EXIT_FAILURE;
  45.         }
  46.         fseek(origem, 0, SEEK_END); // pula para o fim do arquivo
  47.         tamanho = ftell(origem); // obtem o tamanho do arquivo origem
  48.         rewind(origem); // retorna para o inicio do arquivo
  49.  
  50.         buffer = (char *)malloc((tamanho + 1) * sizeof(char)); /* alocando memoria suficiente para o *
  51.                                                                 * conteudo do arquivo inteiro + 0/   */
  52.         if (fread(buffer, tamanho, 1, origem) != 1) {
  53.             printf("Falha na leitura do arquivo %s\n", argv[1]);
  54.             fclose(origem);
  55.             return EXIT_SUCCESS;
  56.         }
  57.         fclose(origem);                                                                                      
  58.  
  59.         FILE* alvo = fopen(argv[2], "wb");
  60.         if (alvo == 0) {
  61.             fclose(origem);
  62.             perror("Nao foi possivel criar um novo arquivo!");
  63.             return EXIT_FAILURE;
  64.         }
  65.  
  66.         shuffle(buffer, tamanho);
  67.  
  68.         if (fwrite(buffer, tamanho, 1, alvo) != 1) {
  69.             printf("Falha na escrita do arquivo %s\n", argv[2]);
  70.             fclose(alvo);
  71.             return EXIT_SUCCESS;
  72.         }
  73.         fclose(alvo);      
  74.  
  75.         return EXIT_SUCCESS;
  76.        
  77.     }
  78.  
  79.     if (strcmp(argv[2], "-R") == 0) {
  80.         printf("Tchau :(\n");
  81.     }
  82.  
  83.     return EXIT_SUCCESS;
  84. }
  85.  
  86. void shuffle(char *array, size_t n)
  87. {
  88.     if (n > 1)
  89.     {
  90.         size_t i;
  91.         for (i = 0; i < n - 1; i++)
  92.         {
  93.           size_t j = i + rand() / (RAND_MAX / (n - i) + 1);
  94.           char t = array[j];
  95.           array[j] = array[i];
  96.           array[i] = t;
  97.         }
  98.     }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement