Share via


_tempnam, _wtempnam, tmpnam, _wtmpnam

Hasilkan nama yang dapat Anda gunakan untuk membuat file sementara. Versi yang lebih aman dari beberapa fungsi ini tersedia; lihat tmpnam_s, _wtmpnam_s.

Sintaks

char *_tempnam(
   const char *dir,
   const char *prefix
);
wchar_t *_wtempnam(
   const wchar_t *dir,
   const wchar_t *prefix
);
char *tmpnam(
   char *str
);
wchar_t *_wtmpnam(
   wchar_t *str
);

Parameter

prefix
String yang ditambahkan sebelumnya ke nama yang dikembalikan oleh _tempnam.

dir
Jalur yang digunakan dalam nama file jika tidak ada variabel lingkungan TMP, atau jika TMP bukan direktori yang valid.

str
Penunjuk yang menyimpan nama yang dihasilkan, identik dengan nama yang dikembalikan oleh fungsi. Ini adalah cara mudah untuk menyimpan nama yang dihasilkan.

Nilai hasil

Masing-masing fungsi ini mengembalikan penunjuk ke nama yang dihasilkan atau NULL jika ada kegagalan. Kegagalan dapat terjadi jika Anda mencoba lebih dari TMP_MAX (lihat STDIO. H) memanggil dengan tmpnam atau jika Anda menggunakan _tempnam dan ada nama direktori yang tidak valid yang ditentukan dalam TMP variabel lingkungan dan dalam dir parameter .

Catatan

Penunjuk dikembalikan oleh tmpnam dan _wtmpnam menunjuk ke buffer statis internal. free tidak boleh dipanggil untuk membatalkan alokasi pointer tersebut. free perlu dipanggil untuk pointer yang dialokasikan oleh _tempnam dan _wtempnam.

Keterangan

Masing-masing fungsi ini mengembalikan nama file yang saat ini tidak ada. tmpnam mengembalikan nama yang unik dalam direktori sementara Windows yang ditunjuk yang dikembalikan oleh GetTempPathW. _tempnam menghasilkan nama unik dalam direktori selain yang ditunjuk. Ketika nama file didahului dengan garis miring terbalik dan tidak ada informasi jalur, seperti \fname21, itu menunjukkan bahwa nama tersebut valid untuk direktori kerja saat ini.

Untuk tmpnam, Anda dapat menyimpan nama file yang dihasilkan ini di str. Jika str adalah NULL, maka tmpnam meninggalkan hasilnya dalam buffer statis internal. Dengan demikian setiap panggilan berikutnya menghancurkan nilai ini. Nama yang dihasilkan oleh tmpnam terdiri dari nama file yang dihasilkan program dan, setelah panggilan pertama ke tmpnam, ekstensi file nomor berurutan di basis 32 (.1-.vvu, ketika TMP_MAX di STDIO. H adalah 32.767).

_tempnam menghasilkan nama file unik untuk direktori yang dipilih oleh aturan berikut:

  • Jika variabel lingkungan TMP ditentukan dan diatur ke nama direktori yang valid, nama file unik dihasilkan untuk direktori yang ditentukan oleh TMP.

  • Jika variabel lingkungan TMP tidak ditentukan atau jika diatur ke nama direktori yang tidak ada, _tempnam gunakan dir parameter sebagai jalur yang menghasilkan nama unik.

  • Jika variabel lingkungan TMP tidak ditentukan atau jika diatur ke nama direktori yang tidak ada, dan jika dir berupa NULL atau diatur ke nama direktori yang tidak ada, _tempnam menggunakan direktori kerja saat ini untuk menghasilkan nama unik. Saat ini, jika TMP dan dir menentukan nama direktori yang tidak ada, panggilan fungsi _tempnam gagal.

Nama yang dikembalikan oleh _tempnam adalah perangkaian dan prefix angka berurutan, yang digabungkan untuk membuat nama file unik untuk direktori yang ditentukan. _tempnam menghasilkan nama file yang tidak memiliki ekstensi. _tempnammalloc menggunakan untuk mengalokasikan ruang untuk nama file; program bertanggung jawab untuk membebaskan ruang ini ketika tidak lagi diperlukan.

_tempnam dan tmpnam secara otomatis menangani argumen string karakter multibyte yang sesuai, mengenali urutan karakter multibyte sesuai dengan halaman kode OEM yang diperoleh dari sistem operasi. _wtempnam adalah versi karakter yang luas dari _tempnam; argumen dan nilai yang dikembalikan adalah _wtempnam string karakter lebar. _wtempnam dan _tempnam bertingkah identik kecuali yang _wtempnam tidak menangani string multibyte-character. _wtmpnam adalah versi karakter yang luas dari tmpnam; argumen dan nilai yang dikembalikan adalah _wtmpnam string karakter lebar. _wtmpnam dan tmpnam bertingkah identik kecuali yang _wtmpnam tidak menangani string multibyte-character.

Jika _DEBUG dan _CRTDBG_MAP_ALLOC didefinisikan, _tempnam dan _wtempnam digantikan oleh panggilan ke _tempnam_dbg dan _wtempnam_dbg.

Pemetaan rutin teks generik

TCHAR. Rutinitas H _UNICODE dan _MBCS tidak ditentukan _MBCS Didefinisikan _UNICODE Didefinisikan
_ttmpnam tmpnam tmpnam _wtmpnam
_ttempnam _tempnam _tempnam _wtempnam

Persyaratan

Rutin Header yang diperlukan
_tempnam <stdio.h>
_wtempnam, _wtmpnam <stdio.h> atau <wchar.h>
tmpnam <stdio.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// crt_tempnam.c
// compile with: /W3
// This program uses tmpnam to create a unique filename in the
// temporary directory, and _tempname to create a unique filename
// in C:\\tmp.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   char * name1 = NULL;
   char * name2 = NULL;
   char * name3 = NULL;

   // Create a temporary filename for the current working directory:
   if ((name1 = tmpnam(NULL)) != NULL) { // C4996
   // Note: tmpnam is deprecated; consider using tmpnam_s instead
      printf("%s is safe to use as a temporary file.\n", name1);
   } else {
      printf("Cannot create a unique filename\n");
   }

   // Create a temporary filename in temporary directory with the
   // prefix "stq". The actual destination directory may vary
   // depending on the state of the TMP environment variable and
   // the global variable P_tmpdir.

   if ((name2 = _tempnam("c:\\tmp", "stq")) != NULL) {
      printf("%s is safe to use as a temporary file.\n", name2);
   } else {
      printf("Cannot create a unique filename\n");
   }

   // When name2 is no longer needed:
   if (name2) {
      free(name2);
   }

   // Unset TMP environment variable, then create a temporary filename in C:\tmp.
   if (_putenv("TMP=") != 0) {
      printf("Could not remove TMP environment variable.\n");
   }

   // With TMP unset, we'll use C:\tmp as the temporary directory.
   // Create a temporary filename in C:\tmp with prefix "stq".
   if ((name3 = _tempnam("c:\\tmp", "stq")) != NULL) {
      printf("%s is safe to use as a temporary file.\n", name3);
   }
   else {
      printf("Cannot create a unique filename\n");
   }

   // When name3 is no longer needed:
   if (name3) {
      free(name3);
   }

   return 0;
}
C:\Users\LocalUser\AppData\Local\Temp\sriw.0 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\stq2 is safe to use as a temporary file.
c:\tmp\stq3 is safe to use as a temporary file.

Baca juga

Streaming I/O
_getmbcp
malloc
_setmbcp
tmpfile
tmpfile_s