char * tmpnam (char * string);
Gera o nome de um arquivo temporário, válido e único. O nome deste arquivo é garantidamente diferente de qualquer outro arquivo existente no diretório temporário, até um certo número de chamadas, indicadas pelo macro TMP_MAX.
Existe uma possível condição de corrida ao utilizar essa função para criar um arquivo temporário: caso outro processo gere um arquivo com o mesmo nome retornado por tmpnam, antes do programa criar o arquivo, problemas podem ocorrer. É recomendado utilizar a função tmpfile para criar arquivos temporários. Em contraste a função tmpfile, o arquivo não é excluído automaticamente. Essa responsabilidade é da aplicação, chamando a função remove para remover o arquivo do sistema.
A cadeia de caracteres string passada como parâmetro pode ser NULL. Se ela for NULL, é utilizado um buffer interno para guardar os dados do nome gerado. O nome pode ser acessado pelo ponteiro retornado pela função. O buffer interno permanece inalterado até uma próxima chamada à esta função. Aplicações que trabalham com várias threads não devem utilizar esse método.
Caso a cadeia de caracteres string passada como parâmetro não seja NULL, o nome do arquivo gerado será armazenado nela. Seu tamanho deve ser de ao menos L_tmpnam.
Localização do nome de arquivo gerado:
Sistema operacional | Pasta temporária |
---|---|
Windows | Pasta localizada na variável de ambiente TEMP (echo %TEMP% no cmd) |
Windows 7 | C:\Users\usuario\AppData\Local\Temp |
Linux e Unix | /tmp |
outro | outra |
Para mais informações sobre a localização, ver o macro P_tmpdir.
string - Cadeia de caracteres onde será armazenado o nome de arquivo gerado. O tamanho desta cadeia deve ser de ao menos L_tmpnam caracteres.
Pode ser NULL. Caso seja NULL, a função tmpnam utiliza um buffer interno para armazenar o nome gerado, retornando um ponteiro para tal. Este buffer não será modificado até a próxima chamada à função tmpnam
Ponteiro para a cadeia de caracteres contendo o nome gerado, seja a cadeia passada à função ou do buffer interno.
Em caso de erro ao tentar gerar o nome, a função retorna NULL.
#include <stdio.h>
int main() {
char *nome_arquivo_temporario = tmpnam(NULL);
printf("Nome gerado: %s\n", nome_arquivo_temporario);
tmpnam(NULL);
printf("Nome gerado: %s\n", nome_arquivo_temporario);
return 0;
}
Os nomes são diferentes, mesmo utilizando o mesmo ponteiro. Isto ocorre pois o ponteiro nome_arquivo_temporario aponta para o buffer interno, que é modificado na segunda chamada à função tmpnam.
#include <stdio.h>
int main() {
char nome_arquivo_temporario[L_tmpnam+1]; /* L_tmpnam, mais 1, para o indicador de fim de cadeia de caracteres (\0) */
tmpnam(nome_arquivo_temporario);
printf("Nome gerado: %s\n", nome_arquivo_temporario);
return 0;
}
tmpfile função
TMP_MAX macro