mkstemp(3) Library Functions Manual mkstemp(3) NAZWA mkstemp, mkostemp, mkstemps, mkostemps - tworzy unikalny plik tymczasowy BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include int mkstemp(char *template); int mkostemp(char *template, int flags); int mkstemps(char *template, int suffixlen); int mkostemps(char *template, int suffixlen, int flags); Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)): 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 unikalna nazwe pliku tymczasowego z template, tworzy i otwiera plik oraz zwraca deskryptor otwartego pliku. Ostatnimi szescioma znakami w template musi byc ,,XXXXXX"; znaki te sa zastepowane lancuchem, ktory czyni nazwe pliku unikalna. Jako ze zostanie on zmodyfikowany, template nie moze byc stala lancuchowa, lecz nalezy go zadeklarowac jako tablice znakow. Plik jest tworzony z uprawnieniami 0600 tj. odczyt i zapis tylko dla wlasciciela. Zwracany deskryptor pliku zapewnia dostep do odczytu i do zapisu do pliku. Plik jest otwierany ze znacznikiem O_EXCL open(2), co gwarantuje, ze wywolujacy jest procesem tworzacym plik. Funkcja mkostemp() dziala jak mkstemp(), z ta roznica, ze nastepujace bity -- o znaczeniu takim samym jak w open(2) -- mozna przekazac we flags: O_APPEND, O_CLOEXEC i O_SYNC. Prosze zauwazyc, ze tworzac plik, mkostemp() zawiera wartosci O_RDWR, O_CREAT i O_EXCL w argumencie flags przekazywanym do open(2); dolaczanie tych wartosci w argumencie flags przekazywanym mkostemp() jest niepotrzebne, a na niektorych systemach zwraca blad. Funkcja mkstemps() dziala jak mkstemp() z ta roznica, ze lancuch w template zawiera przyrostek o dlugosci suffixlen znakow. Z tego wzgledu template ma postac przedrostekXXXXXXprzyrostek, a lancuch XXXXXX jest modyfikowany przez mkstemp(). Funkcja mkostemps() jest w stosunku do mkstemps() tym, czym mkostemp() jest dla funkcji mkstemp(). WARTOSC ZWRACANA Po pomyslnym zakonczeniu funkcje te zwracaja deskryptor pliku dla pliku tymczasowego. Po bledzie zwracane jest -1 i ustawiane errno wskazujac blad. BLEDY EEXIST Nie mozna utworzyc unikalnej nazwy pliku tymczasowego. Zawartosc template jest teraz niezdefiniowana. EINVAL Dla mkstemp() i mkostemp(): Ostatnimi szescioma znakami template nie byly XXXXXX; template nie uleglo zmianie. Dla mkstemps() i mkostemps(): template jest krotsze niz (6 + suffixlen) znakow albo ostatnimi 6 znakami w template przed przyrostkiem nie bylo XXXXXX. Funkcje te moga rowniez zawiesc z dowolnym bledem opisanym dla open(2). ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +---------------------------+--------------------------+---------------+ |Interfejs | Atrybut | Wartosc | +---------------------------+--------------------------+---------------+ |mkstemp(), mkostemp(), | Bezpieczenstwo watkowe | MT-bezpieczne | |mkstemps(), mkostemps() | | | +---------------------------+--------------------------+---------------+ 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 wczesniejszych, tworzony plik ma uprawnienia 0666 tj. odczyt i zapis dla wszystkich. To stare zachowanie moze stanowic zagrozenie bezpieczenstwa, szczegolnie ze wzgledu, ze inne odmiany Uniksa uzywaja 0600 i ktos moglby pominac ten detal przy portowaniu programow. POSIX.1-2008 dodaje wymog, aby ten plik byl tworzony z trybem 0600. Ogolniej, norma POSIX wobec mkstemp() nie mowi nic o trybach pliku, zatem aplikacje powinny sie upewnic, ze ich maska trybu tworzonych plikow (zob. umask(2)) jest wlasciwie ustawiona przed wywolaniem mkstemp() (i mkostemp()). ZOBACZ TAKZE mkdtemp(3), mktemp(3), tempnam(3), tmpfile(3), tmpnam(3) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.15 17 maja 2025 r. mkstemp(3)