Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. napisac program ktory wykonuje kodowanie lub dekodowanie zawartosci jednego pliku przy pomocy klucza zapisanego w drugim pliku (2.5p)
  2. Kod:
  3. koduj [-d] pklucz plik
  4.  
  5. domyslnie program wykonuje kodowanie pliku, a z opcja -d dekodowanie pliku wejsciowego. w obydwu przypadkach nowa zawartosc zastepuje stara zawartosc pliku wejsciowego. klucz do kodowania zapisany jest w postaci ciagu znakow w jednej linii pliku pklucz (nie uwzgledniac znaku konca linii i znaku konca pliku). kolejne znaki klucza (pobierane cyklicznie) sluza do zakodowania kolejnych znakow pliku wejsciowego, przy czym kod ASCII znaku klucza dodawany jest do kodu ASCII kodowanego znaku. odkodowanie znaku nastepuje w wyniku odjecia kodu ASCII znaku klucza. wykorzystac mmap().
  6.  
  7. Kod:
  8. #include <stdio.h>
  9. #include <unistd.h>
  10. #include <string.h>
  11. #include <sys/mman.h>
  12. #include <sys/stat.h>
  13. #include <sys/types.h>
  14. #include <errno.h>
  15. #include <fcntl.h>
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19. char *dane, *klucz;
  20. int fd, i, koduj = 0, r_klucz;
  21. struct stat iwezel;
  22.  
  23. if(argc < 3)
  24. {
  25. perror("uzycie: koduj [-d] pklucz plik\n");
  26. return 1;
  27. }
  28.  
  29. //sprawdzamy czy dekodujemy czy kodujemy
  30. if(strcmp(argv[1], "-d") == 0) koduj = 1;
  31.  
  32. //odczytywanie klucza
  33. if((fd = open(argv[1+koduj], O_RDONLY)) == -1)
  34. {
  35. perror("blad otwarcia pliku klucza\n");
  36. return 2;
  37. }
  38.  
  39. if(fstat(fd, &iwezel))
  40. {
  41. perror("blad fstat\n");
  42. return 3;
  43. }
  44. //rozmiar klucza, byc moze trzeba zmniejszyc jezeli ma nie uwzgledniac znaku konca linii
  45. r_klucz = iwezel.st_size;
  46.  
  47. if((klucz = mmap(NULL, iwezel.st_size, PROT_READ, MAP_SHARED, fd, 0)) == (void*)-1)
  48. {
  49. perror("blad mmap\n");
  50. return 4;
  51. }
  52. close(fd);
  53.  
  54. //odczytywanie danych
  55. if((fd = open(argv[2+koduj], O_RDWR)) == -1)
  56. {
  57. perror("blad otwarcia pliku danych\n");
  58. return 2;
  59. }
  60.  
  61. if(fstat(fd, &iwezel))
  62. {
  63. perror("blad fstat\n");
  64. return 3;
  65. }
  66.  
  67. if((dane = mmap(NULL, iwezel.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)) == (void*)-1)
  68. {
  69. perror("blad mmap\n");
  70. return 4;
  71. }
  72. close(fd);
  73.  
  74. for(i = 0; i < iwezel.st_size; i++)
  75. {
  76. if(koduj == 1) {
  77. dane[i] += klucz[i % r_klucz];
  78. } else {
  79. dane[i] -= klucz[i % r_klucz];
  80. }
  81. }
  82.  
  83. printf("%d", r_klucz);
  84.  
  85. msync(dane, iwezel.st_size, MAP_SHARED); //synchronizacja (zapisanie na dysk pliku z pamieci)
  86. munmap(dane, iwezel.st_size); //zwolnienie pamieci
  87. munmap(klucz, r_klucz);
  88.  
  89. return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement