times(2) System Calls Manual times(2) NAZWA times - pobiera czasy procesow BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include clock_t times(struct tms *buf); OPIS times() przechowuje biezace czasy wykonywania procesu w struct tms, do ktorej prowadzi buf. struct tms jest zdefiniowana w nastepujaco: struct tms { clock_t tms_utime; /* czas w przestrzeni uzytkownika */ clock_t tms_stime; /* czas systemowy */ clock_t tms_cutime; /* czas w przestrzeni uzytkownika dla dzieci*/ clock_t tms_cstime; /* czas systemowy dzieci */ }; Pole tms_utime zawiera czas CPU spedzony na wykonywaniu instrukcji procesu wywolujacego te funkcje. Pole tms_stime zawiera czas CPU spedzony w systemie podczas wykonywania zadan zleconych przez proces. Pole tms_cutime zawiera sume tms_utime i tms_cutime wartosci dla wszystkich dzieci, na ktore proces czekal. Pole tms_cstime zawiera sume wartosci tms_stime i tms_cstime dla wszystkich dzieci, na ktore proces czekal. Czas zakonczonych procesow-dzieci (i ich potomkow) jest dodawany w momencie, gdy wait(2) lub waitpid(2) zwroca ich identyfikatory procesu. W szczegolnosci nigdy nie zostana policzone czasy wnukow, na ktore dzieci nie poczekaly. Wszystkie raportowane czasy sa wyrazone w tyknieciach zegara. WARTOSC ZWRACANA times() returns the number of clock ticks that have elapsed since an arbitrary point in the past. The return value may overflow the possible range of type clock_t. On error, (clock_t) -1 is returned, and errno is set to indicate the error. BLEDY EFAULT tms wskazuje na pamiec poza przestrzenia adresowa procesu. WERSJE Pod Linuksem argument buf moze miec wartosc NULL, w czego wyniku times() tylko zwroci wynik funkcji. Jednakze POSIX nie okresla takiego zachowania i wiekszosc innych implementacji uniksowych wymaga, aby parametr buf nie byl NULL-em. STANDARDY POSIX.1-2008. HISTORIA POSIX.1-2001, SVr4, 4.3BSD. W standardzie POSIX-1996 symbol CLK_TCK (zdefiniowany w ) jest uznany za starzejacy sie. Obecnie jest przestarzaly. Before Linux 2.6.9, if the disposition of SIGCHLD is set to SIG_IGN, then the times of terminated children are automatically included in the tms_cstime and tms_cutime fields, although POSIX.1-2001 says that this should happen only if the calling process wait(2)s on its children. This nonconformance is rectified in Linux 2.6.9 and later. Funkcja times() zwraca liczbe tykniec zegara, ktore uplynely od pewnego wybranego punktu przeszlosci. Pod Linuksem ow "pewien wybrany punkt w przyszlosci" jest rozny w roznych wersjach jadra systemu. W Linuksie 2.4 i wczesniejszych tym punktem jest moment uruchomienia systemu. Od wersji 2.6 Linuksa tym punktem jest (2^32/HZ) - 300 sekund przed momentem uruchomienia systemu. Ta wariantywnosc pomiedzy wersjami jadra (i pomiedzy roznymi implementacjami Uniksa) polaczona z faktem, ze wartosc zwracana moze przekroczyc dopuszczalny zakres typu clock_t, oznacza, ze przenosne aplikacje powinny unikac uzywania tej wartosci. Aby zmierzyc uplyw czasu, lepiej uzywac clock_gettime(2). SVr1-3 zwraca long, a czlonkowie struktury sa typu time_t, chociaz przechowuja tykniecia zegara, a nie sekundy od poczatku epoki. V7 uzywal typu long dla czlonkow struktury, poniewaz nie mial jeszcze wtedy typu time_t. UWAGI Liczbe tykniec zegara na sekunde mozna uzyskac, uzywajac: sysconf(_SC_CLK_TCK); Prosze zauwazyc, ze clock(3) takze zwraca wartosci typu clock_t, ktore sa wyrazone w jednostkach CLOCKS_PER_SEC, a nie w tyknieciach zegara, uzywanych przez times(). USTERKI Ograniczenie w konwencjach tego wywolania systemowego na niektorych architekturach systemowych (zwlaszcza i386) oznacza, ze w Linuksie 2.6 istnieje niewielkie okno czasowe (41 sekund) zaraz po uruchomieniu systemu, w ktorym times() moze zwrocic -1, niepoprawnie wskazujac na wystapienie bledu. Ten sam problem moze wystapic, kiedy wartosc zwracana zostanie zawinieta, gdyz przekroczy maksymalna dopuszczalna wartosc dla typu clock_t. ZOBACZ TAKZE time(1), getrusage(2), wait(2), clock(3), sysconf(3), time(7) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. times(2)