_mktemp_s
, _wmktemp_s
Benzersiz bir dosya adı oluşturur. Bu işlevler, CRT'deki _mktemp
_wmktemp
Gü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_s
arabelleğ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_s
geniş 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_s
bir karakter için yer tutucu olan biçimindedirbaseXXXXXX
base
. 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 base
nameTemplate
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 base
nameTemplate
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