Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
"Here's lookin' at you, kid!"; /* заменяет "hello, world" */ FILE *fp; char buf[BUFSIZ]; fp = tmpfile(); /* Получить временный файл */ fprintf(fp, "%s", mesg); /* Записать s него */ fflush(fp); /* Сбросить на диск */ rewind(fp); /* Перейти в начало */ fgets(buf, sizeof buf, fp); /* Прочесть содержимое */ printf("Got back <%s>n", buf); /* Вывести полученные данные */ fclose(fp); /* Закрыть файл, закончить */ return 0; /* Все сделано */}Возвращенное значение
FILE*FILE*fopen()$ <b>ch12-tmpfile</b>Got back <Here's lookin' at you, kid!>Ранее мы видели, что авторы GLIBC рекомендуют использование функции
mkstemp()$ <b>cc ch12-mktemp.с -о ch12-mktemp</b> /* Компилировать программу *//tmp/cc1XCvD9.о(.text+0x35): In function "main':: the use of 'mktemp' is dangerous, better use 'mkstemp'Эта функция похожа на
mktemp()ХХХХХХ-rw-------Более того, и это то, что делает
mkstemp()O_EXCLВозвращаемое значение является дескриптором открытого файла, который может использоваться для чтения и записи. Для удаления файла после завершения работы с ним должно использоваться имя пути, сохраненное теперь в переданном
mkstemp()ch12-mkstemp.cch12-tmpfile.с/* ch12-mkstemp.с --- демонстрирует mkstemp(). Проверка ошибок для краткости опущена */#include <stdio.h>#include <fcntl.h> /* для флагов открытия */#include <limits.h> /* для PATH_МАХ */int main(void) { static char template[] = "/tmp/myfileXXXXXX"; char fname[PATH_MAX]; static char mesg[] = "Here's lookin' at you, kid!n"; /* заменяет "hello, world" */ int fd; char buf[BUFSIZ]; int n; strcpy(fname, template); /* Копировать шаблон */ fd = mkstemp(fname); /* Создать и открыть временный файл */ printf("Filename is %sn", fname); /* Вывести его для сведений */ write(fd, mesg, strlen(mesg)); /* Что-нибудь записать в файл */ lseek(fd, 0L, SEEK_SET); /* Перейти в начало */ n = read(fd, buf, sizeof(buf)); /* Снова прочесть данные; НЕ завышается ' '! */ printf("Got back: %.*s", n, buf); /* Вывести его для проверки */ close(fd); /* Закрыть файл */ unlink(fname); /* Удалить его */ return 0;}При запуске получаем ожидавшиеся результаты:
$ <b>ch12-mkstemp</b>Filename is /tmp/myfileuXFWINGot back: Here's lookin' at you, kid!12.3.3. Использование переменной окружения
TMPDIRМногие стандартные утилиты обращают внимание на переменную окружения
TMPDIRTMPDIR/tmp/var/tmp/tmpМногие системы GNU/Linux предоставляют каталог
/dev/shmtmpfs:$ <b>df</b>Filesystem 1K-blocks Used Available Use% Mounted on/dev/hda2 6198436 5136020 747544 88% //dev/hda5 61431520 27720248 30590648 48% /dnone 256616 0 256616 0% /dev/shmТип файловой системы
tmpfstmpfs/usr/share/dict/linux.words