mkstemp(3)

NUME
mkstemp, mkostemp, mkstemps, mkostemps - creează un fișier temporar unic

BIBLIOTECA
Biblioteca C standard (libc, -lc)

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

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați 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

DESCRIERE
Funcția mkstemp() generează un nume de fișier temporar unic din șablon, creează și deschide fișierul și returnează un descriptor de fișier deschis pentru fișier.

Ultimele șase caractere din șablon trebuie să fie XXXXXX, iar acestea sunt înlocuite cu un șir de caractere care face ca numele de fișier să fie unic. Deoarece va fi modificat, șablonul nu trebuie să fie o constantă de șiruri de caractere, ci trebuie declarat ca o matrice de caractere.

Fișierul este creat cu permisiunile 0600, adică citire plus scriere numai pentru proprietar. Descriptorul de fișier returnat oferă atât acces de citire, cât și de scriere la fișier. Fișierul este deschis cu fanionul open(2) O_EXCL, garantând că apelantul este procesul care creează fișierul.

Funcția mkostemp() este ca mkstemp(), cu diferența că în flags pot fi specificați următorii biți - cu același înțeles ca pentru open(2) - O_APPEND, O_CLOEXEC și O_SYNC. Rețineți că la crearea fișierului, mkostemp() include valorile O_RDWR, O_CREAT și O_EXCL în argumentul flags dat lui open(2); includerea acestor valori în argumentul flags dat lui mkostemp() nu este necesară și produce erori pe unele sisteme.

Funcția mkstemps() este similară funcției mkstemp(), cu excepția faptului că șirul din șablon conține un sufix de caractere suffixlen. Astfel, șablon este de forma prefixXXXXXXsuffix, iar șirul XXXXXX este modificat ca pentru mkstemp().

Funcția mkostemps() este pentru mkstemps() la fel cum mkostemp() este pentru mkstemp().

VALOAREA RETURNATĂ
În caz de succes, aceste funcții returnează descriptorul de fișier al fișierului temporar. În caz de eroare, este returnat -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

EEXIST
    Nu s-a putut crea un nume de fișier temporar unic. Acum conținutul șablonului este nedefinit.

EINVAL
    Pentru mkstemp() și mkostemp(): ultimele șase caractere din șablon nu erau XXXXXX; acum șablon este neschimbat.

    Pentru mkstemps() și mkostemps(): șablon are mai puțin de (6 + suffixlen) caractere sau ultimele 6 caractere dinaintea sufixului din șablon nu au fost XXXXXX.

Aceste funcții pot eșua, de asemenea, cu oricare dintre erorile descrise pentru open(2).

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
mkstemp(), mkostemp(), mkstemps(), mkostemps() | Siguranța firelor | MT-Safe

STANDARDE

mkstemp()
    POSIX.1-2001.

mkstemps()
    BSD.

mkostemp()
mkostemps()
    GNU.

ISTORIC

mkstemp()
    4.3BSD, POSIX.1-2001.

mkstemps()
    glibc 2.11. BSD, Mac OS X, Solaris, Tru64.

mkostemp()
    glibc 2.7.

mkostemps()
    glibc 2.11.

În versiunile glibc 2.06 și anterioare, fișierul este creat cu permisiunile 0666, adică citire și scriere pentru toți utilizatorii. Acest comportament vechi poate reprezenta un risc de securitate, mai ales că alte versiuni UNIX utilizează 0600, iar cineva ar putea trece cu vederea acest detaliu la adaptarea programelor. POSIX.1-2008 adaugă o cerință ca fișierul să fie creat cu modul 0600.

Mai general, specificația POSIX a mkstemp() nu spune nimic despre modurile de fișier, astfel încât aplicația ar trebui să se asigure că masca sa de creare a modului de fișier (consultați umask(2)) este definită corespunzător înainte de a apela mkstemp() (și mkostemp()).

CONSULTAȚI ȘI
mkdtemp(3), mktemp(3), tempnam(3), tmpfile(3), tmpnam(3)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.