Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

227
Vistas
Entendiendo el os.tmpname() de Lua en Windows

Estoy tratando de usar os.tmpname() de Lua en Windows (que usa tmpnam() debajo del capó), y estoy un poco desconcertado por los nombres de archivo que está devolviendo.

 > print(os.tmpname()) \s3e8.

Si lo envío directamente a Lua como io.open(os.tmpname(), "w") , intentará crear el archivo en el directorio raíz de la unidad actual. Esto parece bastante inapropiado, ya que a menudo no tenemos permiso para hacerlo.

Pero según este hilo:

https://mingw-users.narkive.com/L7VR1gxX/temporal-file-woes

Aparentemente, se supone que es una ruta relativa al directorio actual. Mencionaron este fragmento de una documentación de Microsoft:

Tenga en cuenta que cuando un nombre de archivo se antepone con una barra invertida y sin información de ruta, como \fname21, esto indica que el nombre es válido para el directorio de trabajo actual.

Pero ya no puedo encontrar la documentación que mencionaron en el hilo. Busqué en Google, tratando de encontrar la documentación más reciente y encontré esto: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tempnam-wtempnam-tmpnam-wtmpnam?view=msvc- 160

Estas son las reglas de generación mencionadas en la documentación anterior:

_tempnam generará un nombre de archivo único para un directorio elegido por las siguientes reglas:

Si la variable de entorno TMP se define y establece en un nombre de directorio válido, se generarán nombres de archivo únicos para el directorio especificado por TMP.

Si la variable de entorno TMP no está definida o si se establece en el nombre de un directorio que no existe, _tempnam utilizará el parámetro dir como la ruta para la que generará nombres únicos.

Si la variable de entorno TMP no está definida o si se establece en el nombre de un directorio que no existe, y si dir es NULL o se establece en el nombre de un directorio que no existe, _tempnam utilizará el directorio de trabajo actual para generar nombres únicos. Actualmente, si tanto TMP como dir especifican nombres de directorios que no existen, la llamada a la función _tempnam fallará.

Tengo definida la variable de entorno TMP , pero Lua siempre genera el tipo de rutas que mencioné en la parte superior.

Así que realmente, tengo dos preguntas:

  1. ¿Se supone que esto es una ruta relativa?
  2. Si es así, ¿por qué siempre genera una ruta relativa, en lugar de usar las variables TMP estándar?

Estoy probando esto con Lua 5.2 de LuaBinaries y el Lua integrado estáticamente en las compilaciones mpv de shinchiro .

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

De acuerdo con este hilo en lua-users.org, puede intentar pasar nulo.

bueno, lo resolví usando tmpname(NULL,NULL)... considera el directorio temporal del sistema. cuando uso tmpnam() en Windows en una raíz que no se puede escribir, el nombre de archivo generado (\algo) no se puede escribir... supongo que es un error de implementación

También tenga en cuenta el Manual de referencia de Lua 5.2

Cuando sea posible, puede preferir usar io.tmpfile , que elimina automáticamente el archivo cuando finaliza el programa.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda