Mkstemp - Mkstemp

v výpočetní, mkstemp je POSIX funkce pro vytvoření a dočasný soubor (A počítačový soubor který obvykle přestane existovat, když program, který soubor otevřel, zavře nebo ukončí).[1] Přijímá argument který určuje umístění dočasného souboru a předponu jeho generovaného názvu souboru.[1] Po mkstemp byl přidán do Single UNIX Specification, funkce tempnam () byl zastaralý,[1] protože ten nesl riziko, že dočasný soubor se stejným názvem může být vytvořen jiným vláknem nebo procesem v době, kdy volající získá dočasný název souboru a pokusí se ho vytvořit.[2] mkstemp tímto problémem netrpí.[3]

Používání

Zařazení

C
#zahrnout  // podle IEEE Std 1003.1, 2004#zahrnout  // pro „starší“ systémy
C ++
#zahrnout  // podle IEEE Std 1003.1, 2004#zahrnout  // pro „starší“ systémy

Prohlášení

int mkstemp (char * template);

Požadavky

  • Parametr šablona musí být upravitelné pole znaků s nulovým zakončením.
  • Obsah šablona musí být ve formátu platného cesta k souboru se šesti koncovými písmeny „X“.
  • Parametr šablona nesmí být použit při předchozím vyvolání mkstemp.

Sémantika

Příklad

Následující kód je příkladem použití mkstemp; místní proměnná název souboru je upraven uživatelem mkstemp a bude obsahovat cestu k novému souboru:[4]

#zahrnout <stdlib.h>prázdnota příklad(){    char název souboru[] = „/ tmp / prefXXXXXX“;    mkstemp(název souboru);}

Chybové podmínky

Není specifikováno, zda mkstemp sady errno a jaké hodnoty errno jsou nastaveny, v případě poruchy.[1]

Mechanismus

The mkstemp funkce vygeneruje název souboru podle zadaného argumentu pro šablonu a pokusí se jej vytvořit. Tento postup opakuje, dokud nebude soubor úspěšně vytvořen.[5] Poté otevře soubor a vrátí deskriptor souboru volajícímu,[6] s vyrovnávací paměť dat která byla předána funkci se šablonou, která nyní obsahuje nový název souboru.[7] Soubor lze ihned po mkstemp volání se vrátí, aby se zabránilo otevření dalších procesů, ale soubor lze stále použít, protože volající proces bude mít stále platný deskriptor souboru.[5] Starší verze mkstemp vytvořil soubor s umask 0666, což má za následek to, že dočasné soubory jsou čitelné a zapisovatelné pro všechny uživatele, a představují tak chybu zabezpečení; to je zmírněno ručním nastavením umask před voláním mkstemp.[6] Novější verze funkce vytvoří soubor s umask 600, takže z něj může číst a zapisovat pouze vlastník souboru.[7]

Viz také

Reference

  1. ^ A b C d mkstemp podle OpenGroup
  2. ^ "tempnam". Otevřete Specifikace základní skupiny (Vydání 7 ed.). OpenGroup. 2018.
  3. ^ Stevens, W. Richard; Rago, Stephen A. (2013). "Standardní funkce knihovny". Dočasné soubory. Pokročilé programování v unixovém prostředí. Addison-Wesley. p. 169. ISBN  9780321638007.
  4. ^ Seacord, Robert C. (2014-04-25). "Znaky a řetězce (STR)". STR30-C. Nepokoušejte se upravovat řetězcové literály. Standard kódování CERT C (2. vyd.). Addison-Wesley. p. 203. ISBN  9780133805291.
  5. ^ A b Viega, Johne; Messier, Matt (2003). "Řízení přístupu". Dočasné soubory v systému Unix. Cookbook pro bezpečné programování pro C a C ++. O'Reilly Media. p. 66. ISBN  9780596003944.
  6. ^ A b Chen, Hao; Dean, Drew; Wagner, David A. (2004). „Model kontrolující jeden milion řádků kódu C“ (PDF). Sympozium o zabezpečení sítí a distribuovaných systémů. Internetová společnost. 4. Archivováno (PDF) z původního dne 2015-10-08. Citováno 2019-05-18.
  7. ^ A b Drepper, Ulrichu (2009-04-08). „Defenzivní programování pro Red Hat Enterprise Linux (a co dělat, když se něco pokazí)“ (PDF). p. 7. Archivováno (PDF) z původního dne 2019-03-05. Citováno 2019-05-18.