mkfifo(3)

NAZWA
mkfifo, mkfifoat - tworzy specjalny plik FIFO (potok nazwany)

BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)

SKŁADNIA
#include <sys/types.h>
#include <sys/stat.h>

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

#include <fcntl.h>           /* Definicja stałych AT_* */
#include <sys/stat.h>

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

    Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

mkfifoat():
    Od glibc 2.10:
        _POSIX_C_SOURCE >= 200809L
    Przed glibc 2.10:
        _ATFILE_SOURCE

OPIS
mkfifo() tworzy specjalny plik FIFO o nazwie pathname. mode określa uprawnienia FIFO. Są one modyfikowane przez umask procesu, w standardowy sposób: uprawnieniami tworzonego pliku będą (mode & ~umask).

Specjalny plik FIFO jest podobny do potoku, z tą różnicą, że jest tworzony w inny sposób. Zamiast być anonimowym kanałem komunikacji, specjalny plik FIFO pojawia się w systemie plików po wywołaniu mkfifo().

Po utworzeniu specjalnego pliku FIFO w ten sposób, dowolny proces może go otworzyć do odczytu lub zapisu, w ten sam sposób, jak zwykły plik. Jednak musi być otwarty na obu końcach równocześnie, aby dało się na nim przeprowadzać operacje wejścia lub wyjścia. Otwarcie FIFO do odczytu zwykle blokuje do momentu, aż jakiś inny proces nie otworzy tego samego FIFO do zapisu i na odwrót. Opis nieblokującej obsługi specjalnych plików FIFO zawarto w fifo(7).

  mkfifoat()
Wywołanie systemowe mkfifoat() operuje w dokładnie taki sam sposób jak mkfifo(), z wyjątkiem różnic opisanych tutaj.

Jeśli ścieżka podana w pathname jest względna, jest to interpretowane w odniesieniu do katalogu do którego odnosi się deskryptor pliku dirfd (zamiast w odniesieniu do bieżącego katalogu roboczego procesu wywołującego, jak w stosunku do ścieżek względnych robi to mkfifo()).

Jeśli pathname jest względna a dirfd ma wartość specjalną AT_FDCWD, to pathname jest interpretowana w odniesieniu do bieżącego katalogu roboczego procesu wywołującego (jak mkfifo()).

Jeśli ścieżka pathname jest bezwzględna, to dirfd jest ignorowane.

Więcej informacji o potrzebie wprowadzenia mkfifoat() można znaleźć w podręczniku openat(2).

WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu mkfifo() i mkfifoat() zwracają zero. Po błędzie zwracane jest -1 ustawiane errno wskazując błąd.

BŁĘDY

EACCES
    Jeden z katalogów w ścieżce pathname nie zezwala na uprawnienie przeszukania (wykonania).

EBADF
    (mkfifoat()) pathname jest względna, lecz dirfd nie jest ani AT_FDCWD, ani prawidłowym deskryptorem pliku.

EDQUOT
    Wyczerpano przydział bloków dysku lub i-węzłów użytkownika w systemie plików.

EEXIST
    pathname już istnieje. Obejmuje to przypadek, gdy pathname jest dowiązaniem symbolicznym, prawidłowym lub wiszącym.

ENAMETOOLONG
    Całkowita długość pathname jest większa od PATH_MAX albo jakaś pojedyncza składowa ścieżki ma długość większą od NAME_MAX. W systemie GNU nie ma narzuconego limitu na długość całej ścieżki, ale niektóre systemy plików mogą stosować limity dotyczące składowej ścieżki.

ENOENT
    Składowa pathname, która powinna być katalogiem nie istnieje lub jest wiszącym dowiązaniem symbolicznym.

ENOSPC
    W katalogu lub systemie plików brak miejsca na nowy plik.

ENOTDIR
    Składnik pathname, który powinien być katalogiem, w rzeczywistości katalogiem nie jest.

ENOTDIR
    (mkfifoat()) pathname jest ścieżką względną a dirfd jest deskryptorem pliku odnoszącym się do pliku zamiast do katalogu.

EROFS
    pathname odnosi się do systemu plików tylko do odczytu.

ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
Interfejs | Atrybut | Wartość
mkfifo(), mkfifoat() | Bezpieczeństwo wątkowe | MT-bezpieczne

WERSJE
Zaimplementowane za pomocą mknodat(2).

STANDARDY
POSIX.1-2008.

HISTORIA

mkfifo()
    POSIX.1-2001.

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

ZOBACZ TAKŻE
mkfifo(1), close(2), open(2), read(2), stat(2), umask(2), write(2), fifo(7)

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.