Администрирование локальных сетей
Категория реферата: Рефераты по информатике, программированию
Теги реферата: реферат по культурологии, доклад по биологии
Добавил(а) на сайт: Tolkachjov.
Предыдущая страница реферата | 9 10 11 12 13 14 15 16 17 18 19 | Следующая страница реферата
7. вызов тела требуемого системного вызова - это обычная Си-функция в ядре;
8. возврат ответа в память процесса;
9. выключение привелегированного режима;
10. возврат из прерывания.
Во время системного вызова (шаг 7) процесс может "заснуть", дожидаясь
некоторого события (например, нажатия кнопки на клавиатуре). В это время
ядро передаст управление другому процессу. Когда наш процесс будет
"разбужен" (событие произошло) - он продолжит выполнение шагов системного
вызова.
Большинство системных вызовов возвращают в программу в качестве своего
значения признак успеха: 0 - все сделано, (-1) - сисвызов завершился
неудачей; либо некоторое содержательное значение при успехе (вроде
дескриптора файла в open(), и (-1) при неудаче. В случае неудачного
завершения в предопределенную переменную errno заносится номер ошибки, описывающий причину неудачи (коды ошибок предопределены, описаны в include-
файле и имеют вид Eчтото). Заметим, что при УДАЧЕ эта переменная
просто не изменяется и может содержать любой мусор, поэтому проверять ее
имеет смысл лишь в случае, если ошибка действительно произошла:
#include /* коды ошибок */ extern int errno; extern char *sys_errlist[]; int value; if((value = sys_call(...)) < 0 ){ printf("Error:%s(%d)n", sys_errlist[errno], errno ); exit(errno); /* принудительное завершение программы */
}
Предопределенный массив sys_errlist, хранящийся в стандартной библиотеке, содержит строки-расшифровку смысла ошибок (по-английски). Посмотрите
описание функции per- ror().
Время в UNIX.
Ниже приведены примеры как узнавать время:
. В системе UNIX время обрабатывается и хранится именно в виде числа
секунд; в частности текущее астрономическое время можно узнать системным
вызовом
#include
#include time_t t = time(NULL); /* time(&t); */
Функция struct tm *tm = localtime( &t );
разлагает число секунд на отдельные составляющие, содержащиеся в int-полях
структуры: tm_year год (надо прибавлять 1900) tm_yday день в году 0..365 tm_mon номер месяца 0..11 (0 - Январь) tm_mday дата месяца 1..31 tm_wday день недели 0..6 (0 - Воскресенье) tm_hour часы 0..23 tm_min минуты 0..59 tm_sec секунды 0..59
Номера месяца и дня недели начинаются с нуля, чтобы вы могли использовать
их в качестве индексов: char *months[] = { "Январь", "Февраль", ..., "Декабрь" }; printf( "%sn", months[ tm->tm_mon ] );
Часто бывает нужда передавать значения времени в одной строке
Вот пример программы которая преобразовывает в ремя в такой формат:
/* Mon Jun 12 14:31:26 2000 */
#include
#include main() { /* команда date */ time_t t = time(NULL); char *s = ctime(&t); printf("%s", s);
}
UNIX-машины имеют встроенные таймеры (как правило несколько) с довольно
высоким разрешением. Некоторые из них могут использоваться как "будильники"
с обратным отсчетом времени: в таймер загружается некоторое значение;
таймер ведет обратный отсчет, уменьшая загруженный счетчик; как только это
время истекает - посылается сигнал процессу, загрузившему таймер.
Вот как, к примеру, выглядит функция задержки в микросекундах (миллионных
долях секунды). Примечание: эту функцию не следует использовать вперемежку
с функциями sleep и alarm.
#include
#include
#include
void do_nothing() {}
/* Задержка на usec миллионных долей секунды (микросекунд) */ void usleep(unsigned int usec) {
struct itimerval new, old;
/* struct itimerval содержит поля: struct timeval it_interval; struct timeval it_value;
Где struct timeval содержит поля: long tv_sec; -- число целых секунд long tv_usec; -- число микросекунд
*/ struct sigaction new_vec, old_vec;
if (usec == 0) return;
/* Поле tv_sec содержит число целых секунд.
Поле tv_usec содержит число микросекунд.
Рекомендуем скачать другие рефераты по теме: бесплатные тесты бесплатно, рефераты по медицине.
Предыдущая страница реферата | 9 10 11 12 13 14 15 16 17 18 19 | Следующая страница реферата