Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Autor: Lucas Renato Fidalgo */
- #include <stdio.h> // printf(), scnaf(), fopen(), etc.
- #include <stdlib.h> // EXIT_SUCCESS , EXIT_FAILURE
- #include <string.h> // strcmp()
- void shuffle(char [*], size_t);
- int main(int argc, char* argv[])
- {
- srand(8);
- if (argc == 1) {
- puts("Numero de parametros insuficientes!");
- printf("Digite: %s help\n", argv[0]);
- puts("Para entender como executar o programa.");
- return EXIT_FAILURE;
- } else if (strcmp(argv[1], "help") == 0) { // para ajudar o usuario a utilizar o programa.
- puts("Parametros necessarios para se executar o programa sao:");
- puts("1.O nome do arquivo que deseja utilizar na operacao (se desejar tambem coloque o path do arquivo)");
- puts("2.O nome do arquivo que sera gerado na operacao.");
- puts("3.A operacao que deseja fazer (exemplo: -R)");
- puts("4.Caso a operacao for -E, informar um numero para ser o tamanho do grupo de bytes a serem embaralhados.");
- puts("5.Caso a operacao for -E digitar um numero para servir como seed.");
- printf("Tipos de operacao: -E para embaralhar o conteudo de um arquivo e -R para recuperar o conteudo de um arquivo embaralhado.\n\n");
- puts("Exemplo:");
- printf("%s origem.txt embaralhado.txt -E 8\n", argv[0]);
- return EXIT_FAILURE;
- } else if (argc < 3) { // caso tiver apenas dois parametros e o segundo parametro nao for 'help'
- printf("Numero de parametros insuficientes!\n");
- puts("Digite: ");
- printf("%s help\n", argv[0]);
- puts("Para entender como executar o programa.");
- return EXIT_FAILURE;
- }
- if (strcmp(argv[3], "-E") == 0) {
- char *buffer;
- long tamanho;
- FILE* origem = fopen(argv[1], "rb");
- if (origem == 0) {
- perror("Nao foi possivel abrir arquivo especificado!");
- return EXIT_FAILURE;
- }
- fseek(origem, 0, SEEK_END); // pula para o fim do arquivo
- tamanho = ftell(origem); // obtem o tamanho do arquivo origem
- rewind(origem); // retorna para o inicio do arquivo
- buffer = (char *)malloc((tamanho + 1) * sizeof(char)); /* alocando memoria suficiente para o *
- * conteudo do arquivo inteiro + 0/ */
- if (fread(buffer, tamanho, 1, origem) != 1) {
- printf("Falha na leitura do arquivo %s\n", argv[1]);
- fclose(origem);
- return EXIT_SUCCESS;
- }
- fclose(origem);
- FILE* alvo = fopen(argv[2], "wb");
- if (alvo == 0) {
- fclose(origem);
- perror("Nao foi possivel criar um novo arquivo!");
- return EXIT_FAILURE;
- }
- shuffle(buffer, tamanho);
- if (fwrite(buffer, tamanho, 1, alvo) != 1) {
- printf("Falha na escrita do arquivo %s\n", argv[2]);
- fclose(alvo);
- return EXIT_SUCCESS;
- }
- fclose(alvo);
- return EXIT_SUCCESS;
- }
- if (strcmp(argv[2], "-R") == 0) {
- printf("Tchau :(\n");
- }
- return EXIT_SUCCESS;
- }
- void shuffle(char *array, size_t n)
- {
- if (n > 1)
- {
- size_t i;
- for (i = 0; i < n - 1; i++)
- {
- size_t j = i + rand() / (RAND_MAX / (n - i) + 1);
- char t = array[j];
- array[j] = array[i];
- array[i] = t;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement