Man clock_gettime (2) az idő függvényében órában és

int clock_getres (clockid_tclk_id, struct timespec * res);

int clock_gettime (clockid_tclk_id, struct timespec * tp);

int clock_settime (clockid_tclk_id, const struct timespec * tp);







Összeállított megadásával -lrt beállítás (csak glibc akár változat 2,17).

Vizsgáljuk meg Macro követelmények glibc (lásd feature_test_macros (7).)

clock_getres (), clock_gettime (), clock_settime ():

clock_getres () függvény meghatározza a felbontás (pontosság) meghatározott clk_id óra, és ha nem res NULL, tárolja azt a struct timespec. meghatározott res. Az óra pontossága végrehajtása függ, és nem szabható testre az egyes folyamatot. Ha az idő meghatározott érték az érvelés tp clock_settime () függvény nem többszöröse res. meg van rövidítve többszörösére res.

clock_gettime () és clock_settime () kap, és az idő beállítása az említett órajel clk_id.

Érvek res és tp képviseli a szerkezet timespec. bizonyos itt .

clk_id argumentum azonosító specifikus órán át, amely termelt az intézkedés. Az órát lehet használni az egész rendszerre, ezért látható, hogy minden a folyamatokat, vagy egy adott folyamat, ha az idő számít a csak egy folyamat.

Minden implementáció támogatja a rendszer valós idejű óra, amelyeknek CLOCK_REALTIME azonosító. Idejüket képviselteti másodpercek ns óta eltelt. Ha idejük változtatása időzítő relatív időközönként nem befolyásolja, de az időmérők az abszolút időpontban kell figyelembe venni.

Akkor érhető el, több órán keresztül. Bemutatása a megfelelő értékeket az idő és a hatása időzítő nincs definiálva.

Az utóbbi változat a glibc és a Linux kernel támogatja a következő órák:

CLOCK_REALTIME rendszer óra, visszaszámlálás az igazi (azaz. E. belföldi) időben. Beállítani ezeket órára van szükség a megfelelő jogokat. Ezek az órák vannak kitéve a rendszer idő ugrások (például, ha a rendszergazda manuálisan megváltoztatja az időt), és a fokozatos vágás által végzett adjtime (3) és NTP. CLOCK_REALTIME_COARSE (mivel a Linux 2.6.32; csak Linux-on) egy gyorsabb, de kevésbé pontos változat CLOCK_REALTIME. Használja, ha az igény nem nagyon pontos timestamps, de gyorsan. CLOCK_MONOTONIC óra, amely nem lehet testre monoton, és mutassa az idő múlása számít a kiindulási pont egy bizonyos meghatározatlan. Ezek az órák nem tartoznak a rendszer idő ugrások (például a rendszergazda manuálisan módosította az idő), de befolyásolja a fokozatos kiigazítás által végrehajtott adjtime (3) és NTP. CLOCK_MONOTONIC_COARSE (mivel a Linux 2.6.32; csak Linux-on) egy gyorsabb, de kevésbé pontos változat CLOCK_MONOTONIC. Használja, ha az igény nem nagyon pontos timestamps, de gyorsan. CLOCK_MONOTONIC_RAW (mivel a Linux 2.6.28; csak Linux-on) Úgy néz ki, mint CLOCK_MONOTONIC. de közvetlen hozzáférést biztosít a hardver óra, ami nem sikerül NTP vagy fokozatos szerelvény végre adjtime (3). CLOCK_BOOTTIME (mivel a Linux 2.6.39; csak Linux) Azonos CLOCK_MONOTONIC. hanem tartalmazhat olyan idő, amely alatt a rendszerben felfüggesztették (felfüggesztett). Ez lehetővé teszi az alkalmazások figyelembevétele a felfüggesztés a monoton órát anélkül, hogy a bonyodalmak CLOCK_REALTIME. amely lehet nem egyenletes, ha az idő megváltozik alkalmazásával settimeofday (2). CLOCK_PROCESS_CPUTIME_ID (mivel a Linux 2.6.12) szabható minden folyamat CPU órajel (mért CPU által eltöltött idő minden szál a folyamat). CLOCK_THREAD_CPUTIME_ID (mivel a Linux 2.6.12) órát fut a CPU minden szál.







visszatérési érték

Ha sikeres, a clock_gettime () függvény, clock_settime () és clock_getres () visszatérő 0, vagy -1, ha hiba történt (errno megfelelően állította be).

Ezek rendszer kéri először Linux 2.6.

SZABAD

POSIX-kompatibilis platformok, ahol ezek a funkciók elérhetők, _POSIX_TIMERS jelképe. meghatározott . Ez egy értéke nagyobb, mint 0. A szimbólumok _POSIX_MONOTONIC_CLOCK. _POSIX_CPUTIME. _POSIX_THREAD_CPUTIME mutatja, hogy a rendelkezésre álló CLOCK_MONOTONIC. CLOCK_PROCESS_CPUTIME_ID. CLOCK_THREAD_CPUTIME_ID. (Lásd. Szintén sysconf (3).)

Háttér SMP rendszerek

Mielőtt CLOCK_PROCESS_CPUTIME_ID támogatás és CLOCK_THREAD_CPUTIME_ID adunk Linux. ezek megvalósítása óra glibc számos platformon CPU regiszterek használt időzítő (TSC i386 AR.ITC Itanium). Ezek a nyilvántartások eltérhetnek a CPU, és ennek eredményeként, ezt az órát is vissza hamis eredményeket. ha a folyamat végrehajtása folytatódik egy másik CPU.

Amennyiben a feldolgozó többprocesszoros rendszerek különböző időforrások, nincs módja annak, hogy az egyeztetését időzítő nyilvántartások, mivel minden egyes CPU fog dolgozni egy kissé eltérő frekvenciájú. Ebben az esetben clock_getcpuclockid (0) értéke ENOENT. jelzi az állapotot. Két órával ebben az esetben hasznos lenne, ha tudod, hogy a folyamat marad egy bizonyos CPU.

Processzorok többprocesszoros rendszerekben nem kezdenek el munkát egyidejűleg, és ezért az időzítő regiszterek általában működik egy eltolás. Egyes architektúrák kódot tartalmazhat, amely megkísérli, hogy csökkentsék ezt ellensúlyozza a rendszer betöltésekor. A kód azonban nem tudja garantálni a pontos beállítása az elmozdulás. A glibc nem engedheti meg magának, hogy működjenek együtt ezek a korrekciók (ellentétben a Linux kernel). Általában ezek a korrekciók kicsi, ezért a legtöbb esetben, ezek hatása elhanyagolható.

Kezdve glibc 2.4, csomagolási funkciót rendszer felszólítja az oldalon leírt, nincs ilyen probléma, használt CLOCK_PROCESS_CPUTIME_ID CLOCK_THREAD_CPUTIME_ID nukleáris és végrehajtásának (rendszerek, amelyek azt, vagyis a Linux 2.6.12 vagy újabb).




Kapcsolódó cikkek