_time_ Работа с астрономическим временем. Отсчёт интервалов времени. (1114920), страница 2
Текст из файла (страница 2)
Это значит, что система не может приостановить выполнение пользовательского процесса на время, меньшеечем 1/HZ (на i386 это — 10 миллисекунд). Время выравнивается в сторону увеличения доближайшего значения, кратного 1/HZ. Соответственно, оставшееся время выравнивается всторону увеличения до значения, кратного 1/HZ.Если процесс имеет приоритет реального времени (политика планирования SCHED_FIFOили SCHED_RR, тогда паузы на интервал времени, меньший 1/HZ могут выполняться с помощью циклов задержки.Функции приостановки выполнения программы должны использоваться, когда программа постоянно опрашивает какой-нибудь объект (например, каталог) и отслеживает изменения в нём. Например, программа, которая отслеживает появление в каталоге нового файла исразу же переносит этот файл в другой каталог.#include#include#include#include#include#include<stdio.h><stdlib.h><string.h><unistd.h><time.h><dirent.h>int main(int argc, char **argv){DIR*dd;struct dirent*de;struct timespec ts;charin_path[PATH_MAX+1];charout_path[PATH_MAX+1];if (argc != 3) {fprintf(stderr, "too few arguments\n");exit(1);}6while (1) {if (!(dd = opendir(argv[1]))) {perror("opendir");exit(1);}while ((de = readdir(dd))) {if (strcmp(de->d_name, ".") && strcmp(de->d_name, ".."))break;}if (!de) {closedir(dd);ts.tv_sec = 0;ts.tv_nsec = 1;nanosleep(&ts, NULL);} else {strcpy(in_path, argv[1]);strcat(in_path, "/");strcat(in_path, de->d_name);strcpy(out_path, argv[2]);strcat(out_path, "/");strcat(out_path, de->d_name);if (rename(in_path, out_path) < 0) {perror("rename");exit(1);}closedir(dd);}}return 0;}Если бы вызов nanosleep в строке 34 отсутствовал, программа бы постоянно опрашивала заданный каталог, бесполезно трача процессорное время.
Вызов nanosleep приостановит выполнение программы до следующего кванта времени, позволив нормально работатьдругим процессам.7.