SHARE
TWEET

Untitled

a guest Jun 18th, 2019 70 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. pon, 17 cze 2019, 11:34:57 CEST
  2. Grzegorz Otto nr ind. 234941
  3. PN TN 11-13
  4. Nr tematu 6
  5. Funkcje systemowe
  6.  
  7. 1.  Napisz program kopiuj┬▒cy zawarto┬Â─ç pliku o nazwie podanej jako pierwszy parametr do pliku  kt├│rego nazwa podana jest jako drugi parametr
  8.  
  9. Komenda u┼╝yta do kompilacji: gcc -o p1 p1.c
  10.  
  11. Próba skompilowania pierwszego przykładowego programu do kopiowania nie powiodła się ze względu na niedoł±czone nagłówki unistd.h i cstdlib.h
  12.  
  13. Po doł±czeniu plików nagłówkowych program się skompilował.
  14. Program uruchomiłem wprowadzaj±c do terminala komendę: ./p1 zrodlo cel
  15. Po wykonaniu programu, w pliku cel znajdowala sie zawarto┬Â─ç pliku zrodlo
  16.  
  17. 3. Napisz program, który w pliku o nazwie podanej jako ostatni argument zapisze poł±czon±
  18. zawarto┬Â─ç wszystkich plik├│w kt├│rych nazwy zosta┼éy podane w linii polece┼ä przed ostatnim
  19. argumentem.
  20.  
  21. Poni┼╝ej zamieszczam kod ─Żr├│d┼éowy powsta┼éy poprzez modyfikacj─Ö programu 1.
  22.  
  23. #include <stdlib.h>
  24. #include <fcntl.h>
  25. #include <stdio.h>
  26. #include <unistd.h>
  27.  
  28. #define MAX 512
  29.  
  30.  
  31. int main(int argc, char* argv[])
  32. {
  33.     char buf[MAX];
  34.     int desc_zrod, desc_cel;
  35.     int lbajt;
  36.     if (argc<3) // chcemy conajmniej 2 podane pliki
  37.     {
  38.         fprintf(stderr, "Za malo argumentow. Uzyj:\n");
  39.         fprintf(stderr, "%s <pliki zrodlowe> <plik docelowy>\n",
  40.         argv[0]);
  41.         exit(1);
  42.     }
  43.     for(unsigned i = 0; i<argc-2; ++i) // wykonaj tyle razy, ile jest plikow zrodlowych
  44.     {
  45.         desc_zrod = open(argv[1+i], O_RDONLY);
  46.         if (desc_zrod == -1)
  47.         {
  48.             perror("Blad otwarcia pliku zrodlowego");
  49.             exit(1);
  50.         }  
  51.  
  52.         desc_cel = open(argv[argc-1], O_CREAT | O_RDWR | O_APPEND, 0640); // ostatni
  53.         if (desc_cel == -1)
  54.         {
  55.             perror("Blad utworzenia pliku docelowego");
  56.             exit(1);
  57.         }
  58.  
  59.         while((lbajt = read(desc_zrod, buf, MAX)) > 0)
  60.         {
  61.             if (write(desc_cel, buf, lbajt) == -1)
  62.             {
  63.                 perror("Blad zapisu pliku docelowego");
  64.                 exit(1);
  65.             }
  66.         }
  67.         if (lbajt == -1)
  68.         {
  69.             perror("Blad odczytu pliku zrodlowego");
  70.             exit(1);
  71.         }
  72.         if (close(desc_zrod) == -1)
  73.         {
  74.             perror("Blad zamkniecia pliku");
  75.             exit(1);
  76.         }
  77.     }
  78.     close(desc_cel);
  79.     exit(0);
  80. }
  81.  
  82. Komenda u┼╝yta do kompilacji: gcc -o p3 p3.c
  83. Komenda u┼╝yta do uruchomienia: ./p3 test1 test2 test3 test4
  84. Rezultat: powstanie pliku test4 zawieraj┬▒cego zawarto┬Â─ç plik├│w test1 test2 test3
  85.  
  86. 4. Napisz program licz±cy ile jest słów w pliku (zakładamy, że słowa składaj± się z małych i
  87. du┼╝ych liter alfabetu oraz cyfr i znaku podkre┬Âlenia, a wszystkie pozosta┼ée znaki s┬▒ separatorami s┼é├│w)
  88.  
  89.   #include <stdlib.h>
  90.   #include <fcntl.h>
  91.   #include <stdio.h>
  92.   #include <unistd.h>
  93.   #include <ctype.h>
  94.   #include <stdbool.h>
  95.  
  96.   #define MAX 512
  97.  
  98.  
  99.   int main(int argc, char* argv[])
  100.   {
  101.           bool was_alnum = false;
  102.           unsigned n_words = 0;
  103.           char buf[MAX];
  104.           int desc_zrod, desc_cel;
  105.           int lbajt;
  106.           if (argc!=2) // chcemy tylko 1 argument
  107.           {
  108.                   fprintf(stderr, "Bledna liczka argumentow. Uzyj:\n");
  109.                   fprintf(stderr, "%s <plik zrodlowy>\n",
  110.                   argv[0]);
  111.                   exit(1);
  112.           }
  113.           desc_zrod = open(argv[1], O_RDONLY);
  114.           if (desc_zrod == -1)
  115.           {
  116.                   perror("Blad otwarcia pliku zrodlowego");
  117.                   exit(1);
  118.           }
  119.  
  120.           while((lbajt = read(desc_zrod, buf, MAX)) > 0)
  121.           {
  122.                   for(unsigned i = 0; i<lbajt; ++i)
  123.                   {
  124.  
  125.                           if (!isalnum(buf[i]) && buf[i] != '_')
  126.                           {
  127.                                   if(was_alnum)
  128.                                   {
  129.                                           ++n_words;
  130.                                   }
  131.                                   was_alnum = false;
  132.                           }
  133.                           else
  134.                           {
  135.                                   was_alnum = true;
  136.                           }
  137.                   }
  138.           }
  139.           if (lbajt == -1)
  140.           {
  141.                   perror("Blad odczytu pliku zrodlowego");
  142.                   exit(1);
  143.           }
  144.           if (close(desc_zrod) == -1)
  145.           {
  146.                   perror("Blad zamkniecia pliku");
  147.                   exit(1);
  148.           }
  149.           printf("Znaleziono %d wyrazow\n", n_words);
  150.           close(desc_cel);
  151.           exit(0);
  152. }
  153.  
  154.  
  155.  
  156. Komenda u┼╝yta do kompilacji: gcc -o p4 p4.c
  157. Komenda u┼╝yta do uruchomienia: ./p4 test
  158. Rezultat: wypisanie na ekranie prawidłowej liczby wyrazów
  159.  
  160. 5. Napisz program tworz┬▒cy dwa procesy. Ka┼╝dy ze stworzonych proces├│w powinien utworzy─ç proces - potomka. Nale┼╝y wy┬Âwietla─ç identyfikatory proces├│w rodzic├│w i potomk├│w po ka┼╝dym wywo┼éaniu funkcji fork.
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top