Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pon, 17 cze 2019, 11:34:57 CEST
- Grzegorz Otto nr ind. 234941
- PN TN 11-13
- Nr tematu 6
- Funkcje systemowe
- 1. Napisz program kopiuj±cy zawarto¶ć pliku o nazwie podanej jako pierwszy parametr do pliku którego nazwa podana jest jako drugi parametr
- Komenda użyta do kompilacji: gcc -o p1 p1.c
- 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
- Po doł±czeniu plików nagłówkowych program się skompilował.
- Program uruchomiłem wprowadzaj±c do terminala komendę: ./p1 zrodlo cel
- Po wykonaniu programu, w pliku cel znajdowala sie zawarto¶ć pliku zrodlo
- 3. Napisz program, który w pliku o nazwie podanej jako ostatni argument zapisze poł±czon±
- zawarto¶ć wszystkich plików których nazwy zostały podane w linii poleceń przed ostatnim
- argumentem.
- Poniżej zamieszczam kod Ľródłowy powstały poprzez modyfikację programu 1.
- #include <stdlib.h>
- #include <fcntl.h>
- #include <stdio.h>
- #include <unistd.h>
- #define MAX 512
- int main(int argc, char* argv[])
- {
- char buf[MAX];
- int desc_zrod, desc_cel;
- int lbajt;
- if (argc<3) // chcemy conajmniej 2 podane pliki
- {
- fprintf(stderr, "Za malo argumentow. Uzyj:\n");
- fprintf(stderr, "%s <pliki zrodlowe> <plik docelowy>\n",
- argv[0]);
- exit(1);
- }
- for(unsigned i = 0; i<argc-2; ++i) // wykonaj tyle razy, ile jest plikow zrodlowych
- {
- desc_zrod = open(argv[1+i], O_RDONLY);
- if (desc_zrod == -1)
- {
- perror("Blad otwarcia pliku zrodlowego");
- exit(1);
- }
- desc_cel = open(argv[argc-1], O_CREAT | O_RDWR | O_APPEND, 0640); // ostatni
- if (desc_cel == -1)
- {
- perror("Blad utworzenia pliku docelowego");
- exit(1);
- }
- while((lbajt = read(desc_zrod, buf, MAX)) > 0)
- {
- if (write(desc_cel, buf, lbajt) == -1)
- {
- perror("Blad zapisu pliku docelowego");
- exit(1);
- }
- }
- if (lbajt == -1)
- {
- perror("Blad odczytu pliku zrodlowego");
- exit(1);
- }
- if (close(desc_zrod) == -1)
- {
- perror("Blad zamkniecia pliku");
- exit(1);
- }
- }
- close(desc_cel);
- exit(0);
- }
- Komenda użyta do kompilacji: gcc -o p3 p3.c
- Komenda użyta do uruchomienia: ./p3 test1 test2 test3 test4
- Rezultat: powstanie pliku test4 zawieraj±cego zawarto¶ć plików test1 test2 test3
- 4. Napisz program licz±cy ile jest słów w pliku (zakładamy, że słowa składaj± się z małych i
- dużych liter alfabetu oraz cyfr i znaku podkre¶lenia, a wszystkie pozostałe znaki s± separatorami słów)
- #include <stdlib.h>
- #include <fcntl.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <ctype.h>
- #include <stdbool.h>
- #define MAX 512
- int main(int argc, char* argv[])
- {
- bool was_alnum = false;
- unsigned n_words = 0;
- char buf[MAX];
- int desc_zrod, desc_cel;
- int lbajt;
- if (argc!=2) // chcemy tylko 1 argument
- {
- fprintf(stderr, "Bledna liczka argumentow. Uzyj:\n");
- fprintf(stderr, "%s <plik zrodlowy>\n",
- argv[0]);
- exit(1);
- }
- desc_zrod = open(argv[1], O_RDONLY);
- if (desc_zrod == -1)
- {
- perror("Blad otwarcia pliku zrodlowego");
- exit(1);
- }
- while((lbajt = read(desc_zrod, buf, MAX)) > 0)
- {
- for(unsigned i = 0; i<lbajt; ++i)
- {
- if (!isalnum(buf[i]) && buf[i] != '_')
- {
- if(was_alnum)
- {
- ++n_words;
- }
- was_alnum = false;
- }
- else
- {
- was_alnum = true;
- }
- }
- }
- if (lbajt == -1)
- {
- perror("Blad odczytu pliku zrodlowego");
- exit(1);
- }
- if (close(desc_zrod) == -1)
- {
- perror("Blad zamkniecia pliku");
- exit(1);
- }
- printf("Znaleziono %d wyrazow\n", n_words);
- close(desc_cel);
- exit(0);
- }
- Komenda użyta do kompilacji: gcc -o p4 p4.c
- Komenda użyta do uruchomienia: ./p4 test
- Rezultat: wypisanie na ekranie prawidłowej liczby wyrazów
- 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.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement