tmpnam  função

Protótipo

char * tmpnam (char * string);

Descrição

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.

Parâmetros

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

Valor de retorno

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.

Exemplo: buffer interno
#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.

Exemplo: cadeia de caracteres passada à função
#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;
}
Veja também

tmpfile função

TMP_MAX macro