Dup (systémové volání) - dup (system call) - Wikipedia
![]() | tento článek potřebuje další citace pro ověření.Březen 2012) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
v Unixový operační systémy, dup (zkratka pro "duplikát") a dup2 systémová volání vytvořit kopii daného deskriptor souboru. Tento nový deskriptor se ve skutečnosti nechová jako kopie, ale jako alias toho starého.
Definice POSIX knihovny C
Hovory dup a dup2 jsou standardizovány POSIX Specifikace.[1]
int dup (int oldfd);int dup2 (int oldfd, int newfd);
První přiděluje první dostupný deskriptor, stejně jako otevřeno() chová se; alternativním způsobem, jak duplikovat deskriptor souboru na neurčené místo, je fcntl systémové volání s F_DUPFD
příkaz.
Ten umístí kopii do newfd. Pokud je otevřen newfd, je Zavřeno za prvé.
dup2 pro přesměrování vstupu / výstupu
![]() | Tato sekce potřebuje expanzi. Můžete pomoci přidávat k tomu. (Březen 2012) |
Unix skořápky použití dup2 pro vstup / výstup přesměrování. Spolu s trubka()
, je to nástroj, na kterém Unixové trubky spolehnout se.
Následující příklad používá trubka()
a dup ()
za účelem propojení dvou samostatných procesů (program1 a program2) použitím Unixové trubky:
#zahrnout <stdio.h>#zahrnout <stdlib.h>#zahrnout <unistd.h>/ * funkční prototypy * /prázdnota zemřít(konst char*); int hlavní(int argc, char **argv) { int pdes[2]; pid_t dítě; -li(trubka(pdes) == -1) zemřít("trubka()"); dítě = Vidlička(); -li(dítě == (pid_t)(-1)) zemřít("Vidlička()"); / * vidlice selhala * / -li(dítě == (pid_t)0) { / * podřízený proces * / zavřít(1); / * zavřít standardní * / -li(dup(pdes[1]) == -1) zemřít(„dup ()“); / * nyní stdout a pdes [1] jsou ekvivalentní (dup vrací nejnižší bezplatný deskriptor) * / -li((execlp(„program1“, „program1“, "arg1", NULA)) == -1) zemřít(„execlp ()“); _výstup(EXIT_SUCCESS); } jiný { / * nadřazený proces * / zavřít(0); / * zavřít standardní * / -li(dup(pdes[0]) == -1) zemřít(„dup ()“); / * nyní stdin a pdes [0] jsou ekvivalentní (dup vrací nejnižší bezplatný deskriptor) * / -li((execlp(„program2“, „program2“, "arg1", NULA)) == -1) zemřít(„execlp ()“); výstup(EXIT_SUCCESS); } vrátit se 0;}prázdnota zemřít(konst char *zpráva) { hrůza(zpráva); výstup(EXIT_FAILURE);}
Viz také
- Deskriptor souboru - jak to funguje a další funkce související s otevřením
Reference
- ^ „dup, dup2“. opengroup.org.
- Pokročilé programování v prostředí UNIX od W. Richarda Stevense ISBN 81-7808-096-6