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);

    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 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
mkdtemp(3), mktemp(3), tempnam(3), tmpfile(3), tmpnam(3)

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: 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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.