_mktemp
, _wmktemp
Benzersiz bir dosya adı oluşturur. Bu işlevlerin daha güvenli sürümleri mevcuttur; bkz. _mktemp_s
, _wmktemp_s
.
Sözdizimi
char *_mktemp(
char *nameTemplate
);
wchar_t *_wmktemp(
wchar_t *nameTemplate
);
template <size_t size>
char *_mktemp(
char (&nameTemplate)[size]
); // C++ only
template <size_t size>
wchar_t *_wmktemp(
wchar_t (&nameTemplate)[size]
); // C++ only
Parametreler
nameTemplate
Dosya adı düzeni.
Dönüş değeri
Bu işlevlerin her biri, değiştirilen nameTemplate için bir işaretçi döndürür. İşlev, hatalı biçimlendirilmişse veya verilen nameTemplate adından başka benzersiz ad oluşturulamıyorsa nameTemplate
döndürürNULL
.
Açıklamalar
işlevi bağımsız _mktemp
değişkenini nameTemplate
değiştirerek benzersiz bir dosya adı oluşturur. _mktemp
ç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
, öğesinin _mktemp
geniş karakterli bir sürümüdür; bağımsız değişkeni ve dönüş değeri _wmktemp
geniş karakterli dizelerdir. _wmktemp
ve _mktemp
çok baytlı karakter dizelerini işlememesi dışında _wmktemp
aynı şekilde davranır.
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 |
_mktemp |
_mktemp |
_wmktemp |
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
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
sondaki ilk X'i korur base
ve alfabetik bir karakterle değiştirir. _mktemp
, sondaki 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
öğ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
önceki çağrılarda tarafından _mktemp
döndürülen adlarla nameTemplate
eşleşen dosya adlarını denetler. Belirli bir ad için dosya yoksa, _mktemp
bu adı döndürür. Daha önce döndürülen tüm adlar için dosyalar varsa, _mktemp
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
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
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
.
Hata durumunda errno
ayarlanır. Geçersiz bir biçime sahipse nameTemplate
(örneğin, altı X karakterden az), errno
olarak EINVAL
ayarlanır. 26 olası dosya adının tümü zaten mevcut olduğundan benzersiz bir ad oluşturulamıyorsa _mktemp
, _mktemp
nameTemplate öğesini boş bir dize olarak ayarlar ve döndürür EEXIST
.
C++ dilinde, bu işlevlerin daha yeni ve güvenli karşılıklarını çağıran şablon aşırı yüklemeleri vardır. Daha fazla bilgi için bkz . Güvenli şablon aşırı yüklemeleri.
Gereksinimler
Yordam | Gerekli başlık |
---|---|
_mktemp |
<io.h> |
_wmktemp |
<io.h> veya <wchar.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// crt_mktemp.c
// compile with: /W3
/* The program uses _mktemp to create
* unique filenames. It opens each filename
* to ensure that the next name is unique.
*/
#include <io.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
char *template = "fnXXXXXX";
char *result;
char names[27][9];
int main( void )
{
int i;
FILE *fp;
for( i = 0; i < 27; i++ )
{
strcpy_s( names[i], sizeof( names[i] ), template );
/* Attempt to find a unique filename: */
result = _mktemp( names[i] ); // C4996
// Note: _mktemp is deprecated; consider using _mktemp_s instead
if( result == NULL )
{
printf( "Problem creating the template\n" );
if (errno == EINVAL)
{
printf( "Bad parameter\n");
}
else if (errno == EEXIST)
{
printf( "Out of unique filenames\n");
}
}
else
{
fopen_s( &fp, result, "w" );
if( fp != NULL )
printf( "Unique filename is %s\n", result );
else
printf( "Cannot open %s\n", result );
fclose( fp );
}
}
}
Unique filename is fna03912
Unique filename is fnb03912
Unique filename is fnc03912
Unique filename is fnd03912
Unique filename is fne03912
Unique filename is fnf03912
Unique filename is fng03912
Unique filename is fnh03912
Unique filename is fni03912
Unique filename is fnj03912
Unique filename is fnk03912
Unique filename is fnl03912
Unique filename is fnm03912
Unique filename is fnn03912
Unique filename is fno03912
Unique filename is fnp03912
Unique filename is fnq03912
Unique filename is fnr03912
Unique filename is fns03912
Unique filename is fnt03912
Unique filename is fnu03912
Unique filename is fnv03912
Unique filename is fnw03912
Unique filename is fnx03912
Unique filename is fny03912
Unique filename is fnz03912
Problem creating the template.
Out of unique filenames.
Ayrıca bkz.
Dosya işleme
fopen
, _wfopen
_getmbcp
_getpid
_open
, _wopen
_setmbcp
_tempnam
, _wtempnam
, tmpnam
, _wtmpnam
tmpfile