Чтение онлайн

на главную - закладки

Жанры

Linux программирование в примерах
Шрифт:

$ fdformat /dev/fd0 /* Форматировать гибкий диск */

Double -sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.

Formatting ... done

Verifying ... done

$ /sbin/mke2fs /dev/fd0 /* Создать файловую систему Linux */

/* ...множество вывода опущено... */

$ su /* Стать root, чтобы использовать mount */

Password: /* Пароль не отображается */

# mount -t ext2 -о mand /dev/fd0 /mnt/floppy /* Смонтировать гибкий

диск, с возможностью блокировок */

# suspend /* Приостановить оболочку root */

[1]+ Stopped su

$ ch14-lockall /mnt/floppy/x & /* Фоновая программа */

[2] 23311 /* содержит блокировку */

$ ls -l /mnt/floppy/x /* Посмотреть файл */

– rw-r-Sr-- 1 arnold devel 13 Apr 6 14:23 /mnt/floppy/x

$ echo something > /mnt/floppy/x /* Попытаться изменить файл */

bash2: /mnt/floppy/x: Resource temporarily unavailable

 /* Возвращается ошибка */

$ kill %2 /* Завершить программу с блокировкой */

$ /* Нажать ENTER */

[2]- Terminated ch14-lockall /mnt/floppy/x /* Программа завершена */

$ echo something > /mnt/floppy/x /* Новая попытка изменения работает */

$ fg /* Вернуться в оболочку root */

su

# umount /mnt/floppy /* Демонтировать гибкий диск */

# exit /* Работа с оболочкой root закончена */

$

Пока выполняется

ch14-lockall
, она владеет блокировкой. Поскольку это обязательная блокировка, перенаправления ввода/вывода оболочки завершаются неудачей. После завершения
ch14-lockall
блокировки освобождаются, и перенаправление ввода/вывода достигает цели. Как упоминалось ранее, под GNU/Linux даже
root
не может аннулировать обязательную блокировку файла.

Немного отклоняясь в сторону, гибкие диски представляют отличный испытательный стенд для изучения того, как использовать инструменты, работающие с файловыми системами. Если вы сделаете что-то, что разрушит данные на гибком диске, это вряд ли будет катастрофическим, тогда как экспериментирование с действующими разделами на обычных жестких дисках значительно более рискованно.

14.3. Более точное время

Системный вызов

time
и тип
time_t
представляют время в секундах в формате отсчета с начала Эпохи. Разрешения в одну секунду на самом деле недостаточно, сегодняшние машины быстры, и часто бывает полезно различать временные интервалы в долях секунды. Начиная с 4.2 BSD, Berkley Unix представил ряд системных вызовов, которые сделали возможным получение и использование времени в долях секунд. Эти вызовы доступны на всех современных системах Unix, включая GNU/Linux.

14.3.1. Время в микросекундах:

gettimeofday

Первой задачей является получение времени дня:

#include <sys/time.h>

int gettimeofday(struct timeval *tv, void *tz); /* определение POSIX, а не GLIBC */

gettimeofday
позволяет получить время дня. [156] В случае успеха возвращается 0, при ошибке -1. Аргументы следующие:

struct timeval *tv

156

В справочной странице gettimeofday(2) документирована соответствующая функция

settimeofday
для использования суперпользователем (
root
) для установки времени дня всей системы — Примеч. автора.

Этот аргумент является указателем на

struct timeval
, которая вскоре будет описана и в которую система помещает текущее время.

void *tz

Это аргумент больше не используется; он имеет тип

void*
, поэтому он всегда должен равняться
NULL
. (Справочная страница описывает, для чего он использовался, а затем утверждает, что он устарел. Прочтите, если интересуетесь подробностями.)

Время представлено структурой

struct timeval
:

struct timeval {

 long tv_sec; /* секунды */

 long tv_usec; /* микросекунды */

};

Значение

tv_sec
представляет секунды с начала Эпохи;
tv_usec
является числом микросекунд в секунде.

Справочная страница GNU/Linux gettimeofday(2) документирует также следующие макросы:

#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)

#define timercmp(tvp, uvp, cmp) \

 ((tvp)->tv_sec cmp (uvp)->tv_sec || \

 (tvp)->tv_sec == (uvp)->tv_sec && \

 (tvp)->tv_usec cmp (uvp)->tv_usec)

#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)

Эти макросы работают со значениями

struct timeval*
; то есть указателями на структуры, и их использование должно быть очевидным из их названий и кода. Особенно интересен макрос
timercmp
: третьим аргументом является оператор сравнения для указания вида сравнения. Например, рассмотрим определение того, является ли одна
struct timeval
меньше другой:

Поделиться:
Популярные книги

Законы Рода. Том 3

Андрей Мельник
3. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 3

Надуй щеки! Том 5

Вишневский Сергей Викторович
5. Чеболь за партой
Фантастика:
попаданцы
дорама
7.50
рейтинг книги
Надуй щеки! Том 5

Неучтенный элемент. Том 1

NikL
1. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 1

Лихие. Смотрящий

Вязовский Алексей
2. Бригадир
Фантастика:
попаданцы
5.00
рейтинг книги
Лихие. Смотрящий

Рассвет русского царства. Книга 2

Грехов Тимофей
2. Новая Русь
Фантастика:
альтернативная история
попаданцы
историческое фэнтези
5.00
рейтинг книги
Рассвет русского царства. Книга 2

Кодекс Охотника. Книга XIX

Винокуров Юрий
19. Кодекс Охотника
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XIX

Адепт

Листратов Валерий
4. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Адепт

Идеальный мир для Лекаря 3

Сапфир Олег
3. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 3

Законы Рода. Том 14

Андрей Мельник
14. Граф Берестьев
Фантастика:
аниме
фэнтези
эпическая фантастика
5.00
рейтинг книги
Законы Рода. Том 14

Апокриф

Вайс Александр
10. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Апокриф

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

Антимаг его величества

Петров Максим Николаевич
1. Модификант
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Антимаг его величества

Позывной "Князь"

Котляров Лев
1. Князь Эгерман
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Позывной Князь

Я уже царь. Книга XXIX

Дрейк Сириус
29. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я уже царь. Книга XXIX