Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

239
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!