mkfifo(3)

NUME
mkfifo, mkfifoat - creează un fișier special FIFO (o conductă cu nume)

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <sys/types.h>
#include <sys/stat.h>

int mkfifo(const char *path, mode_t mode);

#include <fcntl.h>           /* Definirea constantelor AT_* */
#include <sys/stat.h>

int mkfifoat(int dirfd, const char *path, mode_t mode);

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

mkfifoat():
    Începând cu glibc 2.10
        _POSIX_C_SOURCE >= 200809L
    Înainte de glibc 2.10:
        _ATFILE_SOURCE

DESCRIERE
mkfifo() creează un fișier special FIFO cu numele rută. mode specifică permisiunile FIFO-ului. Acesta este modificat de umask al procesului în mod obișnuit: permisiunile fișierului creat sunt (mode & ~umask).

Un fișier special FIFO este similar cu o conductă, cu excepția faptului că este creat într-un mod diferit. În loc să fie un canal de comunicare anonim, un fișier special FIFO este introdus în sistemul de fișiere prin apelarea mkfifo().

După ce ați creat un fișier special FIFO în acest mod, orice proces îl poate deschide pentru citire sau scriere, în același mod ca un fișier obișnuit. Cu toate acestea, trebuie să fie deschis simultan la ambele capete înainte de a putea efectua orice operație de intrare sau ieșire pe acesta. Deschiderea unui FIFO pentru citire se blochează în mod normal până când un alt proces deschide același FIFO pentru scriere și viceversa. Consultați fifo(7) pentru gestionarea fără blocare a fișierelor speciale FIFO.

  mkfifoat()
Funcția mkfifoat() funcționează exact în același mod ca funcția mkfifo(), cu excepția diferențelor descrise aici.

Dacă ruta este relativă, atunci acesta este interpretată în raport cu directorul la care se referă descriptorul de fișier dirfd (și nu în raport cu directorul de lucru curent al procesului apelant, așa cum face mkfifo() pentru un nume de rută relativ).

Dacă ruta este relativă și dirfd este valoarea specială AT_FDCWD, atunci ruta este interpretată relativ la directorul de lucru curent al procesului apelant (ca mkfifo()).

Dacă ruta este absolută, atunci fd-director este ignorat.

A se vedea openat(2) pentru o explicație a necesității mkfifoat().

VALOAREA RETURNATĂ
În caz de succes, mkfifo() și mkfifoat() returnează 0. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

EACCES
    Unul dintre directoarele din rută nu are permisiunea de căutare (execuție).

EBADF
    (mkfifoat()) ruta este relativă, dar dirfd nu este nici AT_FDCWD, nici un descriptor de fișier valid.

EDQUOT
    Cota utilizatorului de blocuri de disc sau de noduri-i pe sistemul de fișiere a fost epuizată.

EEXIST
    ruta există deja. Aceasta include cazul în care nume-rută este o legătură simbolică, suspendată sau nu.

ENAMETOOLONG
    Fie lungimea totală a rutei este mai mare decât PATH_MAX, fie o componentă individuală a numelui de fișier are o lungime mai mare decât NAME_MAX. În sistemul GNU, nu există nicio limită impusă asupra lungimii totale a numelui de fișier, dar unele sisteme de fișiere pot impune limite asupra lungimii unei componente.

ENOENT
    O componentă de director din rută nu există sau este o legătură simbolică ruptă.

ENOSPC
    Directorul sau sistemul de fișiere nu are spațiu pentru noul fișier.

ENOTDIR
    O componentă utilizată ca director în rută nu este, de fapt, un director.

ENOTDIR
    (mkfifoat()) ruta este relativă și dirfd este un descriptor de fișier care se referă la un fișier, altul decât un director.

EROFS
    ruta se referă la un sistem de fișiere numai-pentru-citire.

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

VERSIUNI
Aceasta este implementată utilizând mknodat(2).

STANDARDE
POSIX.1-2008.

ISTORIC

mkfifo()
    POSIX.1-2001.

mkfifoat()
    glibc 2.4. POSIX.1-2008.

CONSULTAȚI ȘI
mkfifo(1), close(2), open(2), read(2), stat(2), umask(2), write(2), fifo(7)

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.