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
- Koncové „X je uvnitř
šablona
jsou přepsány, aby se vygeneroval jedinečný název souboru pro výsledný dočasný soubor. - Funkce hlásí platný deskriptor souboru do a dočasný soubor o úspěchu; o selhání, hlásí se
-1
.
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
- ^ A b C d mkstemp podle OpenGroup
- ^ "tempnam". Otevřete Specifikace základní skupiny (Vydání 7 ed.). OpenGroup. 2018.
- ^ 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.
- ^ 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.
- ^ 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.
- ^ 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.
- ^ 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.