UNIX - KOLOKWIUM 3 1. Napisać program w języku C, który wypisze ilość i listę swoich argumentów oraz zmienne środowiskowe. printf("ilosc argumentow: %d\n", argc); for(i = 0; i < argc; i++) printf("argument %d: %s\n", i, argv[i]); for(i = 0; envp[i]!= NULL; i++) printf("zmienna srodowiskowa %d: %s\n", i, envp[i]); extern **environ; for(i = 0; environ[i]!= NULL; i++) { printf("%s\n", environ[i]); 2. Napisać polecenie umożliwiające kompilację dwóch plików 1.c oraz 2.c do pliku 3 oraz wyświetlić wszystkie błędy podczas kompilacji. gcc -Wall -pedantic -ansi -o 3 1.c 2.c gcc -Wextra -pedantic -ansi -o 3 1.c 2.c 3. Jakie zasoby udostępnia X Server? Wyjście (wyświetlacz), wejście sposoby wprowadzania danych (mysz, klawiatura, tablet itp), czcionki. 4. W jakim pliku znajduje się konfiguracja zasobów w systemie X Window? Jak się nią zarządza?.xresources Zarządzanie przez użycie polecenia xrdb z modyfikatorem xrm. 5. Napisz wyrażenie regularne pasujące do formatu czasu: hh:mm:ss ^[0-1][0-9] [2][0-4]:[0-5][0-9]:[0-5][0-9]$ 6. Napisz za pomocą polecenia sed lub awk odpowiednik polecenia head. sed -e '1, 10p' 1.txt awk '{ if(nr >= 1 && NR <= 110) { print ' 1.txt 7. Napisać jak działa funkcja match w awk oraz podać przykład. awk '{ print match($0, /[0-2][0-9]:[0-5][0-9]:[0-5][0-9]/), RLENGTH ' 1.txt Konstrukcja match w awk poszukuje zadanego wzorca (najdłuższego, od lewej strony) w zadanym łańcuchu znakowym. Funkcja zwraca indeks (pozycję) znalezionego podciągu (1 jeżeli zaczyna się wraz z początkiem zadanego łańcucha). Dodatkowo funkcja ustawia wartości dla wbudowanych zmiennych RLENGTH oraz RSTART.
8. Wypisać co piątą linię pliku zaczynając od drugiej linii (2, 7, 12...) oraz dodatkowo wypisz 20 linię. sed -n -e '2~5p; 20p' 1.txt awk '{ if(nr % 5 == 2 NR == 20) { print ' 1.txt 9. Za pomocą sed policzyć liczbę wystąpień litery 'a' w tekście. tr -d '\n' < 1.txt sed -n -e 's/[^a]//gp' wc -c 10. Jak ustawić czcionkę w X Window System? xfontsel -pattern nazwaczcionki 11. Jak zmienić geometry programu w X Window System? xterm -geometry 300x300+20+60 12. Jak wyświetlić informacje dotyczące display w X Window System? xdpyinfo 13. Która zmienna przechowuje adres domyślnego display X Servera ustawić tą zmnienną na pierwszy display i screen dla hosta uhost. export DISPLAY=hostName:displayNr.screenNr export DISPLAY=uhost:0.0 14. Jak awk interpretuje spacje? Spacja domyślnie jest rozdzieleniem między polami w awk (w wypadku zarówno wejścia jak i wyjścia). Biały znak w awk oznacza łańcuch złożony z jednej lub więcej spacji. 15. Jak ustawić w awk wartości separatora pól oraz rekordów. awk 'BEGIN { FS="\n" ; RS="" { <...> ' <...> W przypisaniach można używać wyrażeń regularnych. 16. Co określają następujące zmnienne w programie awk: FS, OFS, RS, ORS, NF, NR? FS rozdzielenie między polami (domyślnie spacja) OFS ekwiwalent FS dla wyjścia RS rozdzielenie między rekordami (domyślnie nowa linia) ORS ekwiwalent RS dla wyjścia NF -ilość pól w przetwarzanym rekordzie NR numer przetwarzanego rekordu 17. Wyświetlić jedynie nazwy użytkowników z pliku /etc/passwd za pomocą sed i awk. sed -n -e 's/:.*//gp' /etc/passwd sed -e "s/\([^:]\):.*/\1/g" /etc/passwd awk -F ":" '{ print $1 ' /etc/passwd wyrażenie regularne: /([^:]*):/ 18. Napisać polecenie sed wypisujące niepuste linie pliku /etc/passwd. sed '/^[[:space:]]*$/d' /etc/passwd 19. Napisać polecenie sed wyświetlające plik /etc/passwd w odwrotnej kolejności. sed '1!G;h;$p' /etc/passwd 20. Napisać polecenie sed wycinające z tekstu tagi HTML. sed -n -e 's/<[^>]*>//gp' 1.txt 21. Wypisać plik wraz z numerami linii z użyciem sed oraz awk. sed '=' /etc/passwd awk '{ print NR, ": ", $0 ' /etc/passwd
22. Stworzyć wyrażenie regularne wyłuskujące równania (liczby z cyfr [0-9] oraz operatory +, -, *, =, brak spacji i innych znaków). ^[0-9]{1,([-\*\/\+][0-9]{1,)*$ 23. Napisać skrypt awk wyświetlający tylko te linie, które zawierają conajmniej jedną cyfrę. awk '{ if(match($0, /[0-9]/)) { print ' 24. Napisz filtr używając polecenia sed, który zamieni wszystkie ala na ela, ale tylko w linijkach, gdzie występuje kot. sed 'kot/s/ala/ela/g/ 1.txt 25. Zdefiniować wyrażenie regularne opisujące ciągi znaków zaczynające się od małej litery zawierające co najmniej 3 cyfry oraz kończące się dwukropkiem: ^[a-z](.*[0-9]){3,.*[:]$ 26. Kiedy w programie awk są wykonywane instrukcje zawarte w blokach BEGIN oraz END w przypadku, kiedy źródło danych składa się z wielu plików? Wykonywane są one przed pierwszym i po ostatnim pliku. 27. Utworzyć w programie nowy proces potomny, który uruchomi /bin/sh. int p = 0; p = fork(); if(p == 0) system("/bin/sh"); 28. Napisać program w języku C, który utworzy proces potomny: proces ten uruchomi program /bin/sh oraz po 10 sekundach zakończy pracę. int p = 0; p = fork(); if(p == 0) { system("/bin/sh"); printf("utworzono proces potomny.\n"); sleep(10); printf("zakonczono proces potomny.\n"); exit(0); else { printf("proces glowny.\n"); exit(0);
29. Napisać program w języku C, który otworzy plik, napisze w nim '1234abcd' i zapisze plik. #include <fcntl.h> int main(int argc, char ** argv, char **envv) { int f = open("2.txt", O_WRONLY); write(f, "1234abcd", 8); close(f); 30. Podaj możliwe flagi dla funkcji open języka C. O_RDONLY O_WRONLY O_RDWR O_NONBLOCK O_APPEND O_CREAT O_TRUNC O_EXCL O_SHLOCK O_EXLOCK O_DIRECT O_FSYNC O_NOFOLLOW Only read operations permitted Only write operations permitted Read and Write operations both permitted Non-blocking, applies to open operation only All writes go to end of file Create file if it doesn't already exist Delete existing contents of file Open fails if file already exists Get a "shared lock" on the file Get an "exclusive lock" on the file Try to avoid all caching of operations All writes immediately effective, no buffering If file is symbolic link, open it, don't follow it 31. Napisz program w języku C, który policzy ilość wystąpień litery 'a' w pliku. #include <fcntl.h> int main(int argc, char ** argv, char **envv) { int count = 0; char currentchar = '\0'; int f = open("2.txt", O_RDONLY); while(read(f, ¤tchar, 1)) if(currentchar == 'a') count++; printf("ilosc wystapien litery 'a': %d\n", count); close(f); 32. Podać polecenie w makefile, które usuwa pliki po kompilacji: clean: rm -f *~ rm -f *.o
33. Z czego składa się plik makefile? Plik ten składa się z reguł definiujących cele pracy programu Make oraz definicji zmiennych. Najprostszy Makefile składa się z zestawów linii o następującej skłądni: plik_wynikowy:pliki_źródłowe polecenia zamieniające pliki źródłowe na wynikowy 34. Napisać makefile, który skompiluje wszystkie pliki z rozszerzeniem.c na pliki z rozszerzeniem.o %.o : %c gcc -c $< -o $@ 35. Napisać program, który przy pomocy powłoki uruchomi proces, podany jako pierwszy argument jego wywołania, z parametrami podanymi jako kolejne argumenty jego wywołania. Program powinien działać poprawnie, jeśli zostanie uruchomiony bez parametrów. int main(int argc, char **argv, char **envp) { if(argc == 1) { printf("blad! Nie podano zadnych argumentow.\n"); else { char *tmpargv[argc-1]; for(i = 0; i < argc - 2; i++) { tmpargv[i] = argv[i + 2]; execv(argv[1], tmpargv); printf("proces %s zostal uruchomiony z argumentami:\n", argv[1]); for(i = 0; i < argc - 2; i++) printf("%s\n", tmpargv[i]); 36. Podać różnice między putenv a setenv. Różnice między poleceniami polegają na agrumentach. putenv przyjmuje jeden argument w formie nazwa_zmiennej=wartosc_zmiennej, natomiast setenv przyjmuje 3 argumenty: nazwa_zmiennej, wartosc_zmiennej, czy_nadpisac. 37. Jak wypisać listę hostów uprawnionych do otwierania okien na X Server: xhost xhost + wyłącza kontrolę dostępu xhost włącza kontrolę xhost +host dodaje host do listy hostów uprawnionych do otwierania okien by slic3