tmpfile, tmpfile_s
|
Определено в заголовке
<stdio.h>
|
||
|
FILE
*
tmpfile
(
void
)
;
|
(1) | |
|
errno_t tmpfile_s
(
FILE
*
restrict
*
restrict
streamptr
)
;
|
(2) | (начиная с C11) |
-
Как и все функции с проверкой границ,
tmpfile_sгарантированно доступна только если реализация определяет __STDC_LIB_EXT1__ и если пользователь определяет __STDC_WANT_LIB_EXT1__ как целочисленную константу 1 перед включением <stdio.h> .
Временный файл, созданный этой функцией, закрывается и удаляется при нормальном завершении программы. Удаляется ли он при аварийном завершении — определяется реализацией.
Содержание |
Параметры
Возвращаемое значение
Примечания
В некоторых реализациях (например, в старых версиях Linux) эта функция фактически создаёт, открывает и немедленно удаляет файл из файловой системы: пока программа удерживает открытый файловый дескриптор удалённого файла, файл существует, но поскольку он был удалён, его имя не отображается ни в одном каталоге, поэтому никакой другой процесс не может его открыть. Как только файловый дескриптор закрывается или программа завершается (нормально или аварийно), пространство, занимаемое файлом, освобождается файловой системой. В более новых версиях Linux (начиная с 3.11 или позднее, в зависимости от файловой системы) такие невидимые временные файлы создаются за один шаг с помощью специального флага в системном вызове
open()
.
В некоторых реализациях (например, Windows) требуются повышенные привилегии, так как функция может создавать временный файл в системном каталоге.
Пример
#define _POSIX_C_SOURCE 200112L #include <stdio.h> #include <unistd.h> int main(void) { printf("TMP_MAX = %d, FOPEN_MAX = %d\n", TMP_MAX, FOPEN_MAX); FILE* tmpf = tmpfile(); fputs("Hello, world", tmpf); rewind(tmpf); char buf[6]; fgets(buf, sizeof buf, tmpf); printf("got back from the file: '%s'\n", buf); // Linux-specific method to display the tmpfile name char fname[FILENAME_MAX], link[FILENAME_MAX] = {0}; sprintf(fname, "/proc/self/fd/%d", fileno(tmpf)); if (readlink(fname, link, sizeof link - 1) > 0) printf("File name: %s\n", link); }
Возможный вывод:
TMP_MAX = 238328, FOPEN_MAX = 16 got back from the file: 'Hello' File name: /tmp/tmpfjptPe5 (deleted)
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
-
- 7.21.4.3 Функция tmpfile (стр.: TBD)
-
- K.3.5.1.1 Функция tmpfile_s (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 7.21.4.3 Функция tmpfile (стр: 222)
-
- K.3.5.1.1 Функция tmpfile_s (стр: 427)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.21.4.3 Функция tmpfile (стр. 303)
-
- K.3.5.1.1 Функция tmpfile_s (стр. 586-587)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 7.19.4.3 Функция tmpfile (стр. 269)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
-
- 4.9.4.3 Функция tmpfile
Смотрите также
|
(C11)
|
возвращает уникальное имя файла
(функция) |
|
C++ documentation
для
tmpfile
|
|