tempnam(3)

NUME
tempnam - creează un nume pentru un fișier temporar

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <stdio.h>

char *tempnam(const char *dir, const char *pfx);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

tempnam():
    Începând cu glibc 2.19:
        _DEFAULT_SOURCE
    glibc 2.19 și versiunile anterioare:
        _BSD_SOURCE || _SVID_SOURCE

DESCRIERE
Nu folosiți niciodată această funcție. Folosiți în schimb mkstemp(3) sau tmpfile(3).

Funcția tempnam() returnează un indicator către un șir de caractere care este un nume de fișier valid și care este de așa natură încât un fișier cu acest nume nu exista în momentul verificării tempnam(). Sufixul numelui de fișier al numelui de rută generat va începe cu pfx în cazul în care pfx este un șir non-NULL de cel mult cinci octeți. Se cere ca partea de prefix de director a numelui de rută generat să fie „adecvată” (adesea, aceasta implică cel puțin posibilitatea de a fi scrisă).

Încercările de a găsi un director adecvat parcurg următorii pași:

(1) În cazul în care variabila de mediu TMPDIR există și conține numele unui director corespunzător, aceasta este utilizată.

(2) În caz contrar, dacă argumentul dir nu este NULL și este adecvat, acesta este utilizat.

(3) În caz contrar, P_tmpdir (așa cum este definit în <stdio.h>) este utilizat atunci când este cazul.

(4) În cele din urmă, se poate utiliza un director definit de implementare.

Șirul de caractere returnat de tempnam() este alocat folosind malloc(3) și, prin urmare, ar trebui să fie eliberat de free(3).

VALOAREA RETURNATĂ
În caz de succes, funcția tempnam() returnează un indicator către un nume de fișier temporar unic. În cazul în care nu poate fi generat un nume unic, se returnează NULL, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

ENOMEM
    A eșuat alocarea de spațiu de stocare.

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

STANDARDE
POSIX.1-2008.

ISTORIC
SVr4, 4.3BSD, POSIX.1-2001. Eliminată în POSIX.1-2008.

NOTE
Deși tempnam() generează nume care sunt greu de ghicit, este totuși posibil ca între momentul în care tempnam() returnează un nume de rută și momentul în care programul îl deschide, un alt program să creeze acel nume de rută folosind open(2) sau să îl creeze ca o legătură simbolică. Acest lucru poate duce la găuri de securitate. Pentru a evita astfel de posibilități, utilizați indicatorul open(2) O_EXCL pentru a deschide numele de rută. Sau, mai bine, utilizați mkstemp(3) sau tmpfile(3).

SUSv2 nu menționează utilizarea lui TMPDIR; glibc îl va utiliza numai atunci când programul nu este set-user-ID. Pe SVr4, directorul utilizat sub (4) este /tmp (și aceasta este ceea ce face glibc).

Deoarece alocă în mod dinamic memoria utilizată pentru a returna numele rutei, tempnam() este reentrantă și, prin urmare, sigură pentru fire, spre deosebire de tmpnam(3).

Funcția tempnam() generează un șir diferit de fiecare dată când este apelată, până la TMP_MAX (definit în <stdio.h>) ori. În cazul în care este apelată de mai mult de TMP_MAX ori, comportamentul este definit de implementare.

tempnam() utilizează cel mult primii cinci octeți din pfx.

Implementarea glibc a tempnam() eșuează cu eroarea EEXIST în cazul în care nu se găsește un nume unic.

ERORI
Sensul precis al cuvântului „adecvat” este nedefinit; nu este specificat modul în care se determină accesibilitatea unui director.

CONSULTAȚI ȘI
mkstemp(3), mktemp(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.