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

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

Жанры

Основы программирования в Linux
Шрифт:

У столь популярных временных файлов есть скрытый недостаток. Вы должны следить за тем, чтобы приложения выбирали уникальное имя для временного файла. Если это условие не соблюдается, могут возникнуть проблемы. Поскольку ОС Linux — многозадачная система, другая программа может выбрать то же самое имя, и обе будут мешать друг другу.

Уникальное имя файла генерируется с помощью функции

tmpnam
:

#include <stdio.h>

char *tmpnam(char *s);

Функция

tmpnam
возвращает допустимое имя файла, не совпадающее с именем любого из существующих файлов. Если строка
s
не равна
NULL
, в нее будет записано имя файла. Последующие вызовы функции tmpnam будут перезаписывать статическую память, используемую для возвращаемых значений, поэтому важно применять строковый параметр, если функция должна вызываться многократно. Длина строки полагается равной, как минимум,
L_tmpnam
(обычно около 20) символам. Функция
tmpnam
может вызываться в одной программе до
TMP_MAX
(не менее нескольких тысяч) раз, и каждый раз она будет генерировать уникальное имя файла.

Если, временный файл предполагается использовать немедленно, вы можете одновременно назвать его и открыть с помощью функции

tmpfile
. Это важно, т.к. другая программа может создать файл с именем таким же, как значение, возвращенное функцией
tmpnam
. Функция
tmpfile
устраняет эту проблему полностью.

#include <stdio.h>

FILE* tmpfile(void);

Функция tmpfile возвращает указатель потока, ссылающийся на уникальный временный файл. Файл открыт для чтения и записи (с помощью

fopen
с флагом
w+
) и будет автоматически удален, когда закроются все ссылки на него.

В случае возникновения ошибки

tmpfile
вернет указатель
NULL
и задаст значение переменной
errno
.

Давайте посмотрим эти две функции в действии:

#include <stdio.h>

#include <stdlib.h>

int main {

 char tmpname[L_tmpnam];

 char* filename;

 FILE *tmpfp;

 filename = tmpnam(tmpname);

 printf("Temporary file name is: %s\n", filename);

 tmpfp = tmpfile;

 if (tmpfp) printf("Opened a temporary file OK\n");

 else perror("tmpfile");

 exit(0);

}

Когда вы откомпилируете и выполните программу tmpnam.с, то увидите уникальное имя файла, сгенерированное функцией

tmpnam
:

$ ./tmpnam

Temporary file name is: /tmp/file2S64zc

Opened a temporary file OK

Как

это работает

Программа вызывает функцию

tmpnam
для генерации уникального имени временного файла. Если вы хотите его использовать, нужно быстро его открыть, чтобы минимизировать риск того, что другая программа откроет файл с тем же именем. Вызов функции
tmpfile
одновременно создает и открывает временный файл, тем самым устраняя этот риск. При компиляции программы, использующей функцию
tmpnam
, компилятор GNU С может вывести предупреждение о применении этой функции.

В некоторых версиях UNIX предлагается другой способ генерации имен временных файлов — с помощью функций

mktemp
и
mkstemp
. Они поддерживаются и ОС Linux и аналогичны функции
tmpnam
за исключением того, что вы должны задать шаблон имени временного файла, который предоставляет некоторые дополнительные возможности управления местом хранения и именем файла.

#include <stdlib.h>

char *mktemp(char *template);

int mkstemp(char *template);

Функция mktemp создает уникальное имя файла на основе заданного шаблона

template
. Аргумент
template
должен быть строкой с шестью завершающими символами
Х
.
mktemp
заменяет эти символы
Х
уникальной комбинацией символов, допустимых в именах файлов. Она возвращает указатель на сгенерированную строку или
NULL
при невозможности сформировать уникальное имя.

Функция

mkstemp
аналогична функции
tmpfile
: она создает и открывает временный файл. Имя файла генерируется так же, как в функции
mktemp
, но возвращенный результат — открытый низкоуровневый дескриптор файла.

Примечание

В ваших собственных программах следует всегда применять функции "создать и открыть"

tmpfile
и
mkstemp
вместо функций
tmpnam
и
mktemp
.

Информация о пользователе

Все программы в ОС Linux за исключением программы init, запускаются другими программами или пользователями. В главе 11 вы узнаете больше о взаимодействии выполняющихся программ или процессов. Пользователи чаще всего запускают программы из командной оболочки, реагирующей на их команды. Вы видели, что в программе можно определить собственное окружение, просматривая переменные окружения и читая системные часы. Программа может также выяснить данные о пользователе, применяющем ее.

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

Путь одиночки. Книга 1

Понарошку Евгений
1. Одиночка
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
5.00
рейтинг книги
Путь одиночки. Книга 1

Ермак. Регент

Валериев Игорь
10. Ермак
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ермак. Регент

Газлайтер. Том 16

Володин Григорий Григорьевич
16. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 16

Третий Генерал: Том IX

Зот Бакалавр
8. Третий Генерал
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Третий Генерал: Том IX

Дракон

Бубела Олег Николаевич
5. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.31
рейтинг книги
Дракон

Душелов. Том 6

Faded Emory
6. Внутренние демоны
Фантастика:
постапокалипсис
ранобэ
хентай
фэнтези
5.00
рейтинг книги
Душелов. Том 6

Бракованная невеста. Академия драконов

Милославская Анастасия
Фантастика:
фэнтези
сказочная фантастика
5.00
рейтинг книги
Бракованная невеста. Академия драконов

Государь

Кулаков Алексей Иванович
3. Рюрикова кровь
Фантастика:
мистика
альтернативная история
историческое фэнтези
6.25
рейтинг книги
Государь

Телохранитель Генсека. Том 1

Алмазный Петр
1. Медведев
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Телохранитель Генсека. Том 1

Изгой Проклятого Клана. Том 2

Пламенев Владимир
2. Изгой
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Изгой Проклятого Клана. Том 2

Последний Герой. Том 5

Дамиров Рафаэль
5. Последний герой
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Последний Герой. Том 5

Жена неверного генерала, или Попаданка на отборе

Удалова Юлия
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Жена неверного генерала, или Попаданка на отборе

Кукловод

Майерс Александр
4. Династия
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кукловод

Мужчина моей судьбы

Ардова Алиса
2. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.03
рейтинг книги
Мужчина моей судьбы