Читаем Linux программирование в примерах полностью

 printf("Got back: %.*s", n, buf);  /* Вывести его для проверки */

 close(fd);                         /* Закрыть файл */

 unlink(fname);                     /* Удалить его */

 return 0;

}

При запуске получаем ожидавшиеся результаты:

$ ch12-mkstemp

Filename is /tmp/myfileuXFWIN

Got back: Here's lookin' at you, kid!

<p>12.3.3. Использование переменной окружения <code>TMPDIR</code></p>

Многие стандартные утилиты обращают внимание на переменную окружения TMPDIR, используя обозначенный в ней каталог в качестве места для помещения временных файлов. Если TMPDIR не установлена, каталогом по умолчанию для временных файлов обычно является /tmp, хотя на многих современных системах есть также и каталог /var/tmp. /tmp обычно очищается от всех файлов и каталогов административными сценариями оболочки при запуске.

Многие системы GNU/Linux предоставляют каталог /dev/shm, использующий файловую систему типа tmpfs:

$ df

Filesystem 1K-blocks     Used Available Use% Mounted on

/dev/hda2    6198436  5136020    747544  88% /

/dev/hda5   61431520 27720248  30590648  48% /d

none          256616        0    256616   0% /dev/shm

Тип файловой системы tmpfs предоставляет электронный (RAM) диск: часть памяти, которая используется, как если бы она была диском. Более того, файловая система tmpfs использует механизмы виртуальной памяти ядра Linux для его увеличения сверх фиксированного размера. Если на вашей системе уйма оперативной памяти, этот подход может обеспечить заметное ускорение. Чтобы протестировать производительность, мы начали с файла /usr/share/dict/linux.words, который является отсортированным списком правильно написанных слов, по одному в строке. Затем мы перемешали этот файл, так что он больше не был сортированным, и создали больший файл, содержащий 500 копий спутанной версии файла:

$ ls -l /tmp/randwords.big /* Показать размер */

-rw-r--r-- 1 arnold devel 204652500 Sep 18 16:02 /tmp/randwords.big

$ wc -l /tmp/randwords.big /* Сколько слов? */

22713500 /tmp/randwords.big /* Свыше 22 миллионов! */

Затем мы отсортировали файл, используя сначала каталог /tmp, а затем с TMPDIR, установленным в /dev/shm[125]:

$ time sort /tmp/randwords.big > /dev/null

 /* Использование реальных файлов */

real 1m32.566s

user 1m23.137s

sys 0m1.740s

$ time TMPDIR=/dev/shm sort /tmp/randwords.big > /dev/null

 /* Использование электронного диска */

real 1m28.257s

user 1m18.469s

sys 0m1.602s

Интересно, использование электронного диска было лишь незначительно быстрее, чем использование обычных файлов. (В некоторых дальнейших тестах оно было даже в действительности медленнее!) Мы предполагаем, что в игру вступил буферный кэш ядра (см. раздел 4.6.2 «Создание файлов с помощью creat()»), весьма эффективно ускоряя файловый ввод/вывод[126].

У электронного диска есть важный недостаток: он ограничен сконфигурированным для вашей системы размером пространства для подкачки.[127] Когда мы попытались отсортировать файл, содержащий 1000 копий файла с перемешанными словами, место на электронном диске закончилось, тогда как обычный sort завершился благополучно.

Использовать TMPDIR для своих программ просто. Мы предлагаем следующую схему.

const char template[] = "myprog.XXXXXX";

char *tmpdir, *tfile;

size_t count;

int fd;

if ((tmpdir = getenv("TMPDIR")) == NULL)

 /* Использовать значение TMPDIR, если имеется */

 tmpdir = "/tmp"; /* В противном случае, /tmp по умолчанию */

count = strlen(tmpdir) + strlen(template) + 2;

 /* Вычислить размер имени файла */

tfile = (char *)malloc(count); /* Выделить для него память */

if (tfile == NULL) /* Проверка ошибок */

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных