Linux программирование в примерах
Linux программирование в примерах читать книгу онлайн
В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Удивительно, но имеются пять различных функций для создания временных файлов. Три из них работают посредством создания строк, представляющих (предположительно) уникальные имена файлов. Как мы увидим, их обычней следует избегать. Оставшиеся две работают путем создания и открытия временного файла; эти функции предпочтительнее для использования.
12.3.1. Создание временных имен файлов (плохо)
Имеются три функции, назначением которых является создание имени уникального, не существующего файла. Получив такое имя, вы можете использовать его для создания временного файла. Поскольку имя уникально, вам «гарантируется» исключительное использование файла. Вот объявления функций:
#include <stdio.h>char *tmpnam(char *s); /* ISO С */char *tempnam(const char *dir, const char *pfx); /* XSI */char *mktemp(char *template); /* ISO С */Все эти функции предусматривают различные вариации одной и той же темы они заполняют или создают буфер с путем уникального временного имени файла. Файл уникален в том, что создаваемое имя не существует во время создания и возвращения его функциями. Функции работают следующим образом:
char *tmpnam(char *s)Генерирует уникальное имя файла. Если
sNULLL_tmpnamsNULLP_tmpdirP_tmpdirL_tmpnam<stdio.h>char *tempnam(const char *dir, const char *pfx)Подобно
tmpnam()dirNULLP_tmpdirpfxNULLtempnam()free()char *mktemp(char *template)Генерирует уникальные имена файлов на основе шаблона. Последними шестью символами
templateХХХХХХЗАМЕЧАНИЕ. Аргумент
templatemktemp()/* Код в старом стиле: не используйте его */char *tfile = mktemp("/tmp/myprogXXXXXX");/* ...использование файла... */На современных системах такой код. вероятно, завершится неудачей, в наши дни строковые константы находятся в сегментах памяти только для чтения.
Использование этих функций довольно просто. Файл
ch12-mktemp.cmktemp()1 /* ch12-mktemp.с --- демонстрирует простое использование mktemp().2 Для краткости проверка ошибок опущена */34 #include <stdio.h>5 #include <fcntl.h> /* для флагов открытия */6 #include <limits.h> /* для PATH_MAX */78 int main(void)9 {10 static char template[] = "/tmp/myfileXXXXXX";11 char fname[PATH_MAX];12 static char mesg[] =13 "Here's lookin' at you, kid'n"; /* вместо "hello, world" */14 int fd;1516 strcpy(fname, template);17 mktemp(fname);1819 /* ОКНО СОСТОЯНИЯ ГОНКИ ОТКРЫВАЕТСЯ */2021 printf("Filename is %sn", fname);2223 /* ОКНО СОСТОЯНИЯ ГОНКИ ТЯНЕТСЯ ДОСЮДА */2425 fd = open(fname, O_CREAT|O_RDWR|O_TRUNC, 0600);26 write(fd, mesg, strlen(mesg));27 close(fd);2829 /* unlink(fname); */3031 return 0;32 }Переменная
templateХХХХХХfnamemktemp()Строка 25 открывает файл, создавая его при необходимости. Строка 26 записывает сообщение в
mesg
