Istnieje kilka sposobów aby utworzyć nazwany potok. Dwie pierwsze mogą zostać wykonane bezpośrednio z powłoki.
mknod MOJEFIFO p
mkfifo a=rw MOJEFIFO
Powyższe dwie komendy wykonują to samo zadanie, z jednym wyjątkiem. Komenda mkfifo umożliwia zmianę atrybutów utworzonego FIFO. Natomiast po użyciu mknod będziemy musieli w tym celu uruchomić chmod.
FIFO może być szybko zidentyfikowane poprzez literkę 'p' w listingu:
$ ls -l MYFIFO
prw-r--r-- 1 root root 0 Dec 14 22:15 MYFIFO|
Zauważ również znak potoku przy nazwie.
Aby utworzyć FIFO za pomocą C musimy posłużyć się wywołaniem systemowym mknod():
FUNKCJA Z BIBLIOTEKI: mknod();
PROTOTYP: int mknod( char *ścieżka, mode_t tryb, dev_t dev);
ZWRACA: 0 - sukces,
-1 - błąd: errno = EFAULT ( nieprawidłowa ścieżka )
EACCES ( niedozwolona operacja )
ENAMETOOLONG ( ścieżka za długa )
ENOENT ( nieprawidłowa ścieżka )
ENOTDIR ( nieprawidłowa ścieżka )
( zerknij do podręcznika mknod po więcej )
UWAGI: Tworzy węzeł w systemie plików ( plik, plik urządzenia, FIFO )
Szczegółowe omówienie mknod() pozostawię podręcznikowi, natomiast my zajmiemy się prostym przykładem tworzenia FIFO w C:
mknod("/tmp/MOJEFIFO", S_IFIFO|0666, 0);
W tym wypadku zostanie utworzony jako FIFO plik '/tmp/MOJEFIFO'. Żądanymi prawami dostępu są '0666', jednakże zależą one również od ustawienia umask w następujący sposób:
końcowe_prawa = żądane_prawa & ~oryginalny_umask
Trikiem na obejście tego jest użycie umask() w celu tymczasowego ustawienia wartości umask:
umask(0);
mknod("/tmp/MOJEFIFO", S_IFIFO|0666, 0);
Trzeci argument mknod() jest ignorowany, chyba że tworzymy plik urządzenia. W takim wypadku służy on do ustawienia głównego i podrzędnego numeru pliku urządzenia.