Aracılığıyla paylaş


_mktemp_s, _wmktemp_s

Benzersiz bir dosya adı oluşturur. Bu işlevler, CRT'deki _mktemp_wmktempGüvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmeleri içeren sürümleridir.

Sözdizimi

errno_t _mktemp_s(
   char *nameTemplate,
   size_t sizeInChars
);
errno_t _wmktemp_s(
   wchar_t *nameTemplate,
   size_t sizeInChars
);
template <size_t size>
errno_t _mktemp_s(
   char (&nameTemplate)[size]
); // C++ only
template <size_t size>
errno_t _wmktemp_s(
   wchar_t (&nameTemplate)[size]
); // C++ only

Parametreler

nameTemplate
Dosya adı düzeni.

sizeInChars
içinde tek baytlı karakterlerle _mktemp_sarabelleğin boyutu; içinde null sonlandırıcı da dahil olmak üzere geniş karakterler _wmktemp_s.

Dönüş değeri

Bu işlevlerin her ikisi de başarıda sıfır döndürür; hatayla ilgili bir hata kodu.

Hata koşulları

nameTemplate sizeInChars Dönüş değeri içinde yeni değer nameTemplate
NULL herhangi bir EINVAL NULL
Yanlış biçim (doğru biçim için açıklamalar bölümüne bakın) herhangi bir EINVAL boş dize
herhangi bir <= X karakter sayısı EINVAL boş dize

Yukarıdaki hata koşullarından herhangi biri oluşursa, parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisi çağrılır. Yürütmenin devam etmesi için izin verilirse, errno olarak ayarlanır EINVAL ve işlevleri döndürür EINVAL.

Açıklamalar

İşlev, _mktemp_s bağımsız değişkenini nameTemplate değiştirerek benzersiz bir dosya adı oluşturur, böylece çağrıdan nameTemplate sonra işaretçi yeni dosya adını içeren bir dizeyi gösterir. _mktemp_s çalışma zamanı sistemi tarafından kullanılmakta olan çok baytlı kod sayfasına göre çok baytlı karakter dizilerini tanıyarak çok baytlı dize bağımsız değişkenlerini uygun şekilde otomatik olarak işler. _wmktemp_s , öğesinin _mktemp_sgeniş karakterli bir sürümüdür; bağımsız değişkeni _wmktemp_s geniş karakterli bir dizedir. _wmktemp_s ve _mktemp_s çok baytlı karakter dizelerini işlememesi dışında _wmktemp_s aynı şekilde davranır.

Bu işlevlerin hata ayıklama kitaplığı sürümleri önce arabelleği 0xFE ile doldurur. Bu davranışı devre dışı bırakmak için kullanın _CrtSetDebugFillThreshold.

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.

Genel metin yordamı eşlemeleri

Tchar.h yordamı _UNICODE ve _MBCS tanımlanmadı _MBCS Tanımlanan _UNICODE Tanımlanan
_tmktemp_s _mktemp_s _mktemp_s _wmktemp_s

nameTemplate bağımsız değişkeni, sağladığınız yeni dosya adının parçası olan ve her X tarafından sağlanan _mktemp_sbir karakter için yer tutucu olan biçimindedirbaseXXXXXXbase. içindeki nameTemplate her yer tutucu karakteri büyük harf X olmalıdır. _mktemp_s sondaki ilk X'i korur base ve alfabetik bir karakterle değiştirir. _mktemp_s , izleyen X karakterlerini beş basamaklı bir değerle değiştirir. Bu değer, çağıran işlemi veya çok iş parçacıklı programlarda çağıran iş parçacığını tanımlayan benzersiz bir sayıdır.

için yapılan her başarılı çağrı _mktemp_s öğesini değiştirir nameTemplate. Aynı işlemden veya aynı bağımsız değişkene sahip iş parçacığından sonraki her çağrıda, _mktemp_s önceki çağrılarda tarafından _mktemp_s döndürülen adlarla nameTemplate eşleşen dosya adlarını denetler. Belirli bir ad için dosya yoksa, _mktemp_s bu adı döndürür. Daha önce döndürülen tüm adlar için dosyalar varsa, _mktemp_s daha önce döndürülen adda kullandığı alfabetik karakteri 'a' ile 'z' arasında sırasıyla sonraki kullanılabilir küçük harfle değiştirerek yeni bir ad oluşturur. Örneğin, şu durumdaysa base :

fn

ve tarafından _mktemp_s sağlanan beş basamaklı değer 12345'tir, döndürülen ilk ad:

fna12345

Dosya FNA12345 oluşturmak için bu ad kullanılıyorsa ve bu dosya hala mevcutsa, aynı işlemden veya aynı iş parçacığından basenameTemplate gelen bir çağrıda döndürülen sonraki ad şu şekildedir:

fnb12345

FNA12345 yoksa, döndürülen sonraki ad yeniden olur:

fna12345

_mktemp_s ve değerlerinin herhangi bir bileşimi basenameTemplate için en fazla 26 benzersiz dosya adı oluşturabilir. Bu nedenle, FNZ12345 bu örnekte kullanılan ve nameTemplate değerleri için base oluşturabileceğiniz son benzersiz dosya adıdır_mktemp_s.

C++'ta bu işlevlerin kullanılması şablon aşırı yüklemeleriyle basitleştirilir; aşırı yüklemeler arabellek uzunluğunu otomatik olarak çıkarabilir (boyut bağımsız değişkeni belirtme gereksinimini ortadan kaldırır) ve eski, güvenli olmayan işlevleri yeni ve güvenli karşılıklarıyla otomatik olarak değiştirebilir. Daha fazla bilgi için bkz . Güvenli şablon aşırı yüklemeleri.

Gereksinimler

Yordam Gerekli başlık
_mktemp_s <io.h>
_wmktemp_s <io.h> veya <wchar.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

// crt_mktemp_s.cpp
/* The program uses _mktemp to create
* five unique filenames. It opens each filename
* to ensure that the next name is unique.
*/

#include <io.h>
#include <string.h>
#include <stdio.h>

char *fnTemplate = "fnXXXXXX";
char names[5][9];

int main()
{
   int i, err, sizeInChars;
   FILE *fp;

   for( i = 0; i < 5; i++ )
   {
      strcpy_s( names[i], sizeof(names[i]), fnTemplate );
      /* Get the size of the string and add one for the null terminator.*/
      sizeInChars = strnlen(names[i], 9) + 1;
      /* Attempt to find a unique filename: */
      err = _mktemp_s( names[i], sizeInChars );
      if( err != 0 )
         printf( "Problem creating the template" );
      else
      {
         if( fopen_s( &fp, names[i], "w" ) == 0 )
            printf( "Unique filename is %s\n", names[i] );
         else
            printf( "Cannot open %s\n", names[i] );
         fclose( fp );
      }
   }

   return 0;
}

Örnek çıktı

Unique filename is fna03188
Unique filename is fnb03188
Unique filename is fnc03188
Unique filename is fnd03188
Unique filename is fne03188

Ayrıca bkz.

Dosya işleme
fopen, _wfopen
_getmbcp
_getpid
_open, _wopen
_setmbcp
_tempnam, _wtempnam, tmpnam, _wtmpnam
tmpfile_s