table of contents
- unstable 1:4.26.2-1
mkstemp(3) | Library Functions Manual | mkstemp(3) |
NAZWA¶
mkstemp, mkostemp, mkstemps, mkostemps - tworzy unikalny plik tymczasowy
BIBLIOTEKA¶
Standardowa biblioteka C (libc, -lc)
SKŁADNIA¶
#include <stdlib.h>
int mkstemp(char *template); int mkostemp(char *template, int flags); int mkstemps(char *template, int suffixlen); int mkostemps(char *template, int suffixlen, int flags);
mkstemp():
_XOPEN_SOURCE >= 500
|| /* glibc >= 2.12: */ _POSIX_C_SOURCE >= 200809L
|| /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
mkostemp():
_GNU_SOURCE
mkstemps():
/* glibc >= 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
mkostemps():
_GNU_SOURCE
OPIS¶
Funkcja mkstemp() generuje unikalną nazwę pliku tymczasowego z template, tworzy i otwiera plik oraz zwraca deskryptor otwartego pliku.
Ostatnimi sześcioma znakami w template musi być „XXXXXX”; znaki te są zastępowane łańcuchem, który czyni nazwę pliku unikalną. Jako że zostanie on zmodyfikowany, template nie może być stałą łańcuchową, lecz należy go zadeklarować jako tablicę znaków.
Plik jest tworzony z uprawnieniami 0600 tj. odczyt i zapis tylko dla właściciela. Zwracany deskryptor pliku zapewnia dostęp do odczytu i do zapisu do pliku. Plik jest otwierany ze znacznikiem O_EXCL open(2), co gwarantuje, że wywołujący jest procesem tworzącym plik.
Funkcja mkostemp() działa jak mkstemp(), z tą różnicą, że następujące bity — o znaczeniu takim samym jak w open(2) — można przekazać we flags: O_APPEND, O_CLOEXEC i O_SYNC. Proszę zauważyć, że tworząc plik, mkostemp() zawiera wartości O_RDWR, O_CREAT i O_EXCL w argumencie flags przekazywanym do open(2); dołączanie tych wartości w argumencie flags przekazywanym mkostemp() jest niepotrzebne, a na niektórych systemach zwraca błąd.
Funkcja mkstemps() działa jak mkstemp() z tą różnicą, że łańcuch w template zawiera przyrostek o długości suffixlen znaków. Z tego względu template ma postać przedrostekXXXXXXprzyrostek, a łańcuch XXXXXX jest modyfikowany przez mkstemp().
Funkcja mkostemps() jest w stosunku do mkstemps() tym, czym mkostemp() jest dla funkcji mkstemp().
WARTOŚĆ ZWRACANA¶
Po pomyślnym zakończeniu funkcje te zwracają deskryptor pliku dla pliku tymczasowego. Po błędzie zwracane jest -1 i ustawiane errno wskazując błąd.
BŁĘDY¶
- EEXIST
- Nie można utworzyć unikalnej nazwy pliku tymczasowego. Zawartość template jest teraz niezdefiniowana.
- EINVAL
- Dla mkstemp() i mkostemp(): Ostatnimi sześcioma znakami template nie były XXXXXX; template nie uległo zmianie.
- Dla mkstemps() i mkostemps(): template jest krótsze niż (6 + suffixlen) znaków albo ostatnimi 6 znakami w template przed przyrostkiem nie było XXXXXX.
Funkcje te mogą również zawieść z dowolnym błędem opisanym dla open(2).
ATRYBUTY¶
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
Interfejs | Atrybut | Wartość |
mkstemp(), mkostemp(), mkstemps(), mkostemps() | Bezpieczeństwo wątkowe | MT-bezpieczne |
STANDARDY¶
- mkstemp()
- POSIX.1-2001.
- mkstemps()
- BSD.
- mkostemp()
- mkostemps()
- GNU.
HISTORIA¶
- mkstemp()
- 4.3BSD, POSIX.1-2001.
- mkstemps()
- glibc 2.11. BSD, Mac OS X, Solaris, Tru64.
- mkostemp()
- glibc 2.7.
- mkostemps()
- glibc 2.11.
W wersjach glibc 2.06 i wcześniejszych, tworzony plik ma uprawnienia 0666 tj. odczyt i zapis dla wszystkich. To stare zachowanie może stanowić zagrożenie bezpieczeństwa, szczególnie ze względu, że inne odmiany Uniksa używają 0600 i ktoś mógłby pominąć ten detal przy portowaniu programów. POSIX.1-2008 dodaje wymóg, aby ten plik był tworzony z trybem 0600.
Ogólniej, norma POSIX wobec mkstemp() nie mówi nic o trybach pliku, zatem aplikacje powinny się upewnić, że ich maska trybu tworzonych plików (zob. umask(2)) jest właściwie ustawiona przed wywołaniem mkstemp() (i mkostemp()).
ZOBACZ TAKŻE¶
TŁUMACZENIE¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.
2 maja 2024 r. | Linux man-pages 6.9.1 |