Сохранить tmpfile Lua после выполнения

Загружает файл, представленный как tmpfile(), и будет удален после завершения работы скрипта. Как жестко связать этот файл, чтобы сохранить его содержимое после удаления tmpfile?

Как получить имя файла по его дескриптору?

> a=io.tmpfile()
> print(a)
file (0x20c8790)
> lfs=require"lfs"
> lfs.link(a,"/tmp/aaaa")
stdin:1: bad argument #1 to 'link' (string expected, got FILE*)
stack traceback:
    [C]: in function 'lfs.link'
    stdin:1: in main chunk
    [C]: in ?

Этот файл слишком велик, чтобы копировать его по байтам в другой.


person eri    schedule 28.02.2016    source источник
comment
Просто используйте обычные файлы. В окнах я знаю, что существует способ получить имя по дескриптору. Также возможно получить дескриптор из FILE* (но могут возникнуть проблемы, если вы скомпонуете статический MSCRT). Но вам действительно нужно это вместо того, чтобы просто создать файл вручную и использовать его как tmp? Это мой импл. github.com/moteus/lua-path/blob/ мастер/lua/путь.lua#L229   -  person moteus    schedule 28.02.2016
comment
Используйте os.tmpname() вместо io. tmpfile()   -  person Egor Skriptunoff    schedule 28.02.2016
comment
io.tmpfile() находится внутри библиотеки, поэтому я не хотел редактировать это   -  person eri    schedule 29.02.2016


Ответы (1)


io.tmpfile использует tmpfile из stdio.h, поэтому настроить эту экспортированную функцию будет невозможно. можно использовать такие библиотеки, как pl.path, полный путь к временному файлу.

person Kosho-b    schedule 28.02.2016