Sdílet prostřednictvím


_mktemp_s, _wmktemp_s

Vytvoří jedinečný název souboru.Tyto verze jsou _mktemp, _wmktemp s vylepšení zabezpečení popsaným v Funkce zabezpečení v CRT.

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

Parametry

  • template
    Vzor názvu souboru.

  • sizeInChars
    Velikost vyrovnávací paměti v jednobajtových znaků v _mktemp_s; široký znaky v _wmktemp_s, včetně ukončovací znak null.

Vrácená hodnota

Obě tyto funkce vrátí nulu při úspěchu; Kód chyby při selhání.

Chybové podmínky

template

sizeInChars

Vrácená hodnota

nové hodnoty v šabloně

NULL

žádné

EINVAL

NULL

Nesprávný formát (viz Remarks části pro správný formát)

žádné

EINVAL

prázdný řetězec

žádné

< = počet x

EINVAL

prázdný řetězec

Pokud dojde k některé z výše uvedených podmínek chyba, je vyvolána neplatný parametr popisovače, popsaným v Ověření parametru.Pokud je povoleno spuštění pokračovat, errno je nastavena na EINVAL a vrátí funkce EINVAL.

Poznámky

_mktemp_s Funkce vytvoří jedinečný název souboru změnou template argument, tak, že po volání, template ukazuje ukazatel na řetězec obsahující nový název souboru._mktemp_sautomaticky zpracovává argumenty řetězec vícebajtových znaků podle potřeby UZNÁVAJÍCE vícebajtové znakové sekvence podle vícebajtové znakové stránky právě používán spuštění systému._wmktemp_sje verze celého znaku _mktemp_s; argument _wmktemp_s je řetězec znaků wide._wmktemp_sa _mktemp_s chovají jinak shodně s výjimkou, že _wmktemp_s nezpracovává vícebajtové znakové řetězce.

Obecný Text rutinní mapování

Rutina Tchar.h

_UNICODE a _MBCS není definován

_MBCS, definice

_UNICODE, definice

_tmktemp_s

_mktemp_s

_mktemp_s

_wmktemp_s

template Argument má tvar baseXXXXXX, kde base je nový název souboru, je součástí a každý x je zástupný symbol pro znak poskytnutých _mktemp_s.Každý zástupný znak v template musí být velkými písmeny X._mktemp_szachovává base a nahradí první koncové x abecední znak._mktemp_snahradí následující koncové x s pěti číslicemi hodnotu; Tato hodnota je jedinečné číslo identifikující volající proces, nebo s více podprocesy programy volající vlákno.

Každé úspěšné volání _mktemp_s upravuje template.V každé následné volání z stejný proces nebo podproces se stejným template argument, _mktemp_s kontroly názvů souborů, které odpovídají názvy vrácené _mktemp_s v předchozí volání.Pokud neexistuje žádný soubor pro zadaný název _mktemp_s vrátí název.Pokud existují soubory pro všechny dříve vráceny názvy, _mktemp_s nahrazením abecední znak používá název dříve vrácených s další malé písmeno, v pořadí od "a" až "z" vytvoří nový název.Například pokud base je:

fn

a hodnota pětimístná poskytnutých _mktemp_s je 12345, je vrácen název první:

fna12345

Pokud tento název se používá k vytvoření souboru FNA12345 a tento soubor stále existuje, další název vrácené volání stejný proces nebo podproces se stejným base pro template je:

fnb12345

Pokud FNA12345 neexistuje, je opět vrátil následující název:

fna12345

_mktemp_smůžete vytvořit maximálně 26 jedinečných názvů souborů pro jakékoli dané kombinace hodnot base a šablony.FNZ12345 tedy poslední jedinečný název _mktemp_s můžete vytvořit base a template hodnoty použité v tomto příkladu.

V jazyce C++ použití těchto funkcí je zjednodušeno díky šablony přetížení; přetížení automaticky odvodit vyrovnávací paměti (není tak nutné zadat argument velikost) a jsou automaticky nahradit starší, -secure funkce s jejich protějšky novější, zabezpečené.Další informace naleznete v tématu Přetížení zabezpečení šablony.

Požadavky

Rutina

Požadované záhlaví

_mktemp_s

<io.h>

_wmktemp_s

<io.h> nebo <wchar.h>

Další informace o kompatibilitě v tématu Compatibility v úvodu.

Příklad

// 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;
}

Vzorový výstup

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

Ekvivalent v rozhraní .NET Framework

Nelze použít Použijte volání funkce standardní C, PInvoke. Další informace naleznete v tématu Příklady vyvolat platformu.

Viz také

Referenční dokumentace

Zpracování souborů

fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile_s