Pike to interpretowany, obiektowy język programowania o składni wyrażeń zbliżonej do C/C++/Java. Nie jest może zbyt szeroko spopularyzowany, ale jest łatwy, prosty i wygodny w użyciu, posiada dogodne złożone typy danych i dobrze współdziała z (niektórymi) serwerami relacyjnych baz danych (jak np. MySQL) oraz z serwerami WWW: Roxen i Caudium. Te ostatnie to główne aplikacje oparte na języku Pike. Umożliwia również programowanie graficzne (okienkowe) z wykorzystaniem bibliotek Gnome/GTK oraz OpenGL. Programy w Pike pisze się dość łatwo, wydajność (szybkość programów, wymagania pamięciowe) jest porównywalna z językiem Perl, przy bardziej przejrzystej składni i strukturze obiektowej.
Interpreter języka Pike jest zainstalowany na komputerze primus, w paru
różnych wersjach; wersja najbardziej aktualna i z dostępem do bibliotek GTK występuje
jako /usr/bin/pike7.2. NB. aby było możliwe uruchomienie programu takiego,
jak stoper, tj. korzystającego z okieniek, najlepiej zdalną sesję
na primus uruchomić przez slogin -X primus.okwf.fuw.edu.pl
(dotyczy to dostępu z sal pracowni OKWF).
Found nlink symlinks, nbogus bogus (percent%)
oczywiście w miejsce nlink itd. powinny pojawić się odpowiednie liczby.
Imię: częstość. Informacje o kontach
pobieramy za pomocą funkcji getpwent().
Funkcja ta toarray(string|int) getpwent(); tzn. wywołuje się ją bez argumentów, a zwraca tablicę której elementami są napisy i liczby całkowite -- są to wartości zapisane w kolejnych polach jednego rekordu passwd. W kolejnych wywołaniachgetpwent()zwracane będą kolejne rekordy passwd, w kolejności nieokreślonej lecz bez powtórzeń. W razie potrzeby, czytanie bazy passwd można zacząć od nowa wywołującsetpwent(). Po zakończeniu odczytywania zawartości bazy warto ją zamknąć, wywołującendpwent()-- szczególnie jeżeli w dalszej pracy programu może powstać potrzeba by znów czytać dane z passwd.
W jakiej kolejności pola passwd występują w tablicy zwracanej przezgetpwent()? Najprościej sprawdzić to interakcyjnie:
bash-2.05a$ pike Pike v7.2 release 236 running Hilfe v2.0 (Incremental Pike Frontend) > getpwent(); Result: ({ /* 7 elements */ "root", "x", 0, 0, "root", "/root", "/bin/bash" }) >Inne pokrewne funkcje toarray(int|string) getpwnam(string pw_name)orazarray(int|string) getpwuid(int pw_uid). Łatwo dojść co one robią, czytając dokumentację (man) ich imienniczek z biblioteki C, lub eksperymentując w trybie interakcyjnym.
-n
powoduje wypisanie listy posortowanej wg. częstości wystąpień, z zachowaniem porządku
alfabetycznego dla przypadków o równej częstości.
Tutaj przyda się funkcjaDla ambitnych: tworzyć histogram w postaci pliku graficznego zapisywanego na dysku lub bezpośrednio wyświetlanego w oknie.object file_stat(string filename, int|void follow_links). A oto jak poznać jakie są atrybuty zwracanego przez nią obiektu:bash-2.05a$ pike Pike v7.2 release 236 running Hilfe v2.0 (Incremental Pike Frontend) > indices(file_stat(".")); Result: ({ /* 20 elements */ "ctime", "islnk", "mtime", "atime", "size", "rdev", "gid", "uid", "nlink", "mode", "ino", "dev", "type", "mode_string", "issock", "isfifo", "isblk", "ischr", "isdir", "isreg" }) > file_stat(".")->type; Result: "dir" >itd.
mbox i tworzący posortowaną listę
adresów nadawców.
main zwraca -1; chodzi
o to, aby po stworzeniu elementów interfejsu, powiązaniu ich z funkcjami (signal_connect)
i wywołaniu wypełnionego okienka program nie zakończył natychmiast działania, tylko czekał
na zdarzenia (w tym wypadku związane z działaniami użytkownika); taki jest efekt powrotu
funkcji main z wartością ujemną (w Pike!). Program zakończy działanie, gdy
użytkownik zamknie jego okno -- to trzeba było zapewnić za pomocą
signal_connect("destroy", exit, 0).