Что такое код tmpfile


Временное расположение файла при использовании tmpfile() в C

$ man tmpfile говорит

Стандарт не указывает каталог, который будет использовать tmpfile(). Glibc попробует префикс пути P_tmpdir, определенный в , и если что не работает каталог /tmp.

Я использую Ubuntu 13.10 x86_64, gcc и libc BTW.

Поэтому, когда я пытаюсь создать временный файл, используя tmpfile(), я не вижу никакого временного файла в /tmp. (Я вижу # define P_tmpdir «/tmp» в stdio.h). Это фрагмент кода, который я использовал:

$ ./tmpfile
Теперь, когда scanf ожидает следующего (избыточного) ввода, я должен был увидеть временный файл в /tmp. Но я не могу. Итак, где именно создается этот tmpfile?

Вероятно, запись файла в каталоге удаляется напрямую. В системах POSIX сам файл остается действительным после удаления, если у вас есть дескриптор открытого файла. (В вашем случае скрыто в возвращаемом значении FILE* .)

С помощью этой технологии никто не может проникнуть и открыть этот файл, он доступен только через вашу переменную tmp .

Компиляция вашего кода и его запуск через strace показывает расположение и имя файла:

«/tmp/tmpfflAlKG» создается через open()

а затем сразу получает unlink()

поэтому видимая запись в каталоге исчезает.

Как все еще открыт для процесса, сам файл остается действительным для процесса до процесса close() . Последнее происходит неявно через вызов `exit_group():

Функция tmpfile

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

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

Временный файл, созданный функцией tmpfile() , автоматически удаляется при закрытии файла или по завершении программы.

Количество временных файлов, которые можно открыть, равно значению TMP_MAX (которое не превышает предел, определяемый значением FOPEN_MAX ).

tmpfile — Создаёт временный файл

(PHP 4, PHP 5, PHP 7)

tmpfile — Создаёт временный файл

Описание

Создаёт временный файл с уникальным именем, открывая его в режиме чтения и записи (w+), и возвращает файловый указатель.

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

Илон Маск рекомендует:  Описание доменных зон

Для дополнительной информации, обратитесь к документации вашей системы по функции tmpfile(3), а также к заголовочному файлу stdio.h .

Возвращаемые значения


Возвращает дескриптор файла, аналогичный тому, который возвращает функция fopen() для новых файлов или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Пример использования функции tmpfile()

Результат выполнения данного примера:

Смотрите также

  • tempnam() — Создаёт файл с уникальным именем
  • sys_get_temp_dir() — Возвращает путь к директории временных файлов

Что такое код tmpfile

Класс для работы с временным файлом на PHP как альтернатива стандартной функции tmpfile() . Подробнее об устройстве класса написано на Хабре. В свой проект можно подключить через Composer:

Класс поддерживает стандартный набор CRUD-операций. Методы для записи и чтения являются обёртками для file_put_contents() и file_get_contents() . Для открытия временного файла в потоке используйте fopen() . Ниже приведены возможные варианты применения в боевых условиях:

Магический метод __toString() при declare(strict_types=1)

Начиная с версии 7.0, при указании строгой типизации declare(strict_types=1) , имя временного файла нельзя передать используя возможности __toString() , т. к. принимающая функция или класс ожидают строку, а по факту мы передаём объект. В таком случае будет брошено исключение TypeError. Это поведение можно обойти, если сразу передать имя временного файла через свойство объекта $tmpfile->filename :

Отслеживание открытых потоков fopen(new tmpfile, ‘r+’)

Класс new tmpfile не полностью повторяет функцию tmpfile() , т. к. при открытии потока fopen(new tmpfile, ‘r+’) временный файл блокируется и не будет автоматически удалён. Решить эту проблему можно, если самостоятельно отследить не закрытый поток временного файла по URI и закрыть его через fclose() :

Я не добавил этот код в метод $tmpfile->delete() в силу того, что удобнее сразу работать с tmpfile() для хранения временных данных в контексте решения локальных задач, где вся логика инкапсулирована в одном методе или классе. Автоматическое закрытие ресурса было бы избыточно, т. к. его можно и нужно отслеживать самостоятельно. Класс new tmpfile предназначен, всё же, для перемещения URI временного файла между объектами и дальнейшей работы с ним как с обычным файлом.

Тема: необходим доступ к функции tmpfile и tempnam

Опции темы
Поиск по теме

необходим доступ к функции tmpfile и tempnam

В связи с тем что для правильной работы некоторых скриптов необходим доступ к функции tmpfile и tempnam , нам необходимо иметь в конфиге апача по умолчанию такое изменение:

вместо php_admin_value open_basedir «/var/www/technoport/data:.» это должно выглядеть так php_admin_value open_basedir «/var/www/technoport/data:/tmp:.»

мы конечно можем править в ручную для вновь созданных доменов , но потребность и необходимость в том, бы чтобы по умолчанию панель добавляла темп папку в этот параметр

можете ли вы выпустить специально для нас небольшой патч, либо указать где можно исправить это самостоятельно.

Re: необходим доступ к функции tmpfile и tempnam

В связи с тем что для правильной работы некоторых скриптов необходим доступ к функции tmpfile и tempnam , нам необходимо иметь в конфиге апача по умолчанию такое изменение:

вместо php_admin_value open_basedir «/var/www/technoport/data:.» это должно выглядеть так php_admin_value open_basedir «/var/www/technoport/data:/tmp:.»

Илон Маск рекомендует:  GetLastError - Функция Delphi


мы конечно можем править в ручную для вновь созданных доменов , но потребность и необходимость в том, бы чтобы по умолчанию панель добавляла темп папку в этот параметр

можете ли вы выпустить специально для нас небольшой патч, либо указать где можно исправить это самостоятельно.

в версии RPO можно редактировать конфиг апача, прямо из панели

Файл в папке temp

В данном разделе форума действуют дополнительные правила — тема «Общие правила раздела «Уничтожение вирусов»» . Пожалуйста, ознакомьтесь с ними перед размещением любого сообщения в данном разделе.

Для оформления запроса о помощи, внимательно прочитайте и аккуратно выполните указания в теме «Порядок оформления запроса о помощи» .

  • Авторизуйтесь для ответа в теме

#1 OFF sven74

Прикрепленные файлы

  • virusinfo_syscure.zip32,26К скачиваний 49
  • virusinfo_syscheck.zip32,58К скачиваний 32
  • info.txt46,82К скачиваний 64
  • log.txt124,89К скачиваний 54

#2 OFF thyrex

Награды

Скорее всего временный файл какой-то из установленных программ

Пофиксите в HiJack

Microsoft MVP 2012-2020 Consumer Security
Microsoft MVP 2020 Reconnect

PHP получить путь к временному файлу из функции tmpfile

PHP функция tmpfile возвращает ресурс дескриптор на созданный временный файл. Я записываю в него данные, но мне нужно узнать его размер и другую информацию о файле, это можно сделать имея путь к файлу. Читать файл по кускам и считать количество прочитанный байт не очень удобно. Возможно ли получить путь к файлу созданному функции tmpfile?

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

Функция stream_get_meta_data возвращает информацию из потока.


Да, функцию tmpnam лучше не использовать.

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

c — Что такое дыра безопасности в tmpfile и как tmpfile_s разрешает его?

Что такое дыра безопасности в tmpfile и как tmpfile_s разрешает его?

    1 1
  • 1 июл 2020 2020-07-01 12:39:56
  • Mehrdad

1 ответ

В этом случае он, по-видимому, подпадает под категорию «Улучшенная отчетность об ошибках» обновлений для Windows CRT. В этом случае это в основном означает, что он вернет значение статуса и заполнит предопределенный указатель FILE , а не просто FILE указатель FILE .

Что такое код tmpfile

The standard does not specify the directory that tmpfile() will use.
Glibc will try the path prefix P_tmpdir defined in , and if
that fails the directory /tmp.

Я использую Ubuntu 13.10 x86_64, gcc и libc BTW.

Поэтому, когда я пытаюсь создать временный файл, используя tmpfile (), я не вижу никакого временного файла в / tmp. (Я вижу # define P_tmpdir «/ tmp» в stdio.h). Вот фрагмент кода, который я использовал:

$ ./tmpfile
Теперь, пока scanf ожидает следующего (избыточного) ввода, я должен был увидеть временный файл в / tmp. Но я не могу. Итак, где же создается этот tmpfile?

С этой техникой никто не может проникнуть и открыть этот файл, он доступен только через вашу переменную tmp.

Илон Маск рекомендует:  Оптимизация для pentium процессора оптимизация цикла

tmpfile_s tmpfile_s

Создает временный файл. Creates a temporary file. Это версия функции tmpfile с усовершенствованиями системы безопасности, описанными в разделе Функции безопасности в CRT. It is a version of tmpfile with security enhancements as described in Security Features in the CRT.

Синтаксис Syntax

Параметры Parameters

пфилептр pFilePtr
Адрес указателя для хранения адреса созданного указателя на поток. The address of a pointer to store the address of the generated pointer to a stream.

Возвращаемое значение Return Value

Возвращает 0 в случае успеха или код ошибки в случае неудачи. Returns 0 if successful, an error code on failure.

Условия ошибок Error Conditions

пфилептр pFilePtr Возвращаемое значение Return Value Содержимое пфилептр Contents of pFilePtr
NULL NULL EINVAL EINVAL не изменено not changed

Если возникает ошибка проверки приведенного выше параметра, вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров. If the above parameter validation error occurs, the invalid parameter handler is invoked, as described in Parameter Validation. Если выполнение может быть продолжено , для параметра еинвал устанавливается значение, а для возвращаемого значения — еинвал. If execution is allowed to continue, errno is set to EINVAL and the return value is EINVAL.

Примечания Remarks

Функция tmpfile_s создает временный файл и помещает указатель на этот поток в аргументе пфилептр . The tmpfile_s function creates a temporary file and puts a pointer to that stream in the pFilePtr argument. Временный файл создается в корневом каталоге. The temporary file is created in the root directory. Чтобы создать временный файл в каталоге, отличном от корневого, используйте tmpnam_s или tempnam в сочетании с fopen. To create a temporary file in a directory other than the root, use tmpnam_s or tempnam in conjunction with fopen.

Если файл не удается открыть, tmpfile_s записывает значение NULL в параметр пфилептр . If the file cannot be opened, tmpfile_s writes NULL to the pFilePtr parameter. Этот временный файл автоматически удаляется при закрытии файла, при завершении программы в обычном режиме или при вызове _rmtmp , предполагая, что текущий рабочий каталог не изменяется. This temporary file is automatically deleted when the file is closed, when the program terminates normally, or when _rmtmp is called, assuming that the current working directory does not change. Временный файл открывается в режиме w + b (двоичный для чтения и записи). The temporary file is opened in w+b (binary read/write) mode.

Сбой может произойти при попытке более TMP_MAX_S (см. stdio). H) вызывает метод с tmpfile_s. Failure can occur if you attempt more than TMP_MAX_S (see STDIO.H) calls with tmpfile_s.

Требования Requirements

Подпрограмма Routine Обязательный заголовок Required header
tmpfile_s tmpfile_s

Дополнительные сведения о совместимости см. в разделе Совместимость. For additional compatibility information, see Compatibility.

Пример Example

В этом примере для запуска в Windows могут потребоваться права администратора. This example may require administrative privileges to run on Windows.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL