dup()
binárny vyhľadávací strom
Systémové volanie dup() vytvorí kópiu deskriptora súboru.
- Pre nový deskriptor používa nepoužitý deskriptor s najnižším číslom.
- Ak sa kópia úspešne vytvorí, potom sa deskriptory súboru originálu a kópie môžu používať zameniteľne.
- Obidve odkazujú na rovnaký popis otvoreného súboru, a teda zdieľajú príznaky posunu súboru a stavu súboru.
Syntax:
int dup(int oldfd);C
oldfd: old file descriptor whose copy is to be created.
// C program to illustrate dup() #include #include #include int main() { // open() returns a file descriptor file_desc to a // the file 'dup.txt' here' int file_desc = open('dup.txt' O_WRONLY | O_APPEND); if(file_desc < 0) printf('Error opening the filen'); // dup() will create the copy of file_desc as the copy_desc // then both can be used interchangeably. int copy_desc = dup(file_desc); // write() will write the given string into the file // referred by the file descriptors write(copy_desc'This will be output to the file named dup.txtn' 46); write(file_desc'This will also be output to the file named dup.txtn' 51); return 0; }
Všimnite si, že tento program sa nespustí v online kompilátore, pretože zahŕňa otvorenie súboru a zápis doň.
Vysvetlenie:
Open() vracia deskriptor súboru file_desc do súboru s názvom 'dup.txt'. file_desc možno použiť na vykonanie niektorých operácií so súborom 'dup.txt'. Po použití systémového volania dup() sa vytvorí kópia súboru_desc copy_desc. Túto kópiu je možné použiť aj na vykonanie niektorých operácií so súborom s rovnakým súborom 'dup.txt'. Po dvoch operáciách zápisu, jedna s file_desc a druhá s copy_desc sa upraví ten istý súbor, t.j. 'dup.txt'. Pred spustením kódu Nechajte súbor 'dup.txt' pred operáciou zápisu vyzerať takto:

Po spustení programu C zobrazenom nad súborom 'dup.txt' je znázornené nižšie:

dup2()
Systémové volanie dup2() je podobné ako dup(), ale základný rozdiel medzi nimi je v tom, že namiesto použitia najnižšieho nepoužitého deskriptora súboru používa číslo deskriptora určené používateľom.
Syntax:
int dup2(int oldfd int newfd);
oldfd: old file descriptor
newfd new file descriptor which is used by dup2() to create a copy.
Dôležité body:
- Zahrňte hlavičkový súbor unistd.h na použitie systémového volania dup() a dup2().
- Ak bol deskriptor newfd predtým otvorený, pred opätovným použitím sa ticho zatvorí.
- Ak oldfd nie je platným deskriptorom súboru, volanie zlyhá a newfd sa neuzavrie.
- Ak je oldfd platným deskriptorom súboru a newfd má rovnakú hodnotu ako oldfd, potom dup2() neurobí nič a vráti newfd.
Zložité použitie systémového volania dup2():
Rovnako ako v prípade dup2() je možné namiesto newfd vložiť ľubovoľný deskriptor súboru. Nižšie je implementácia C, v ktorej sa používa deskriptor súboru štandardného výstupu (stdout). To povedie k zápisu všetkých príkazov printf() do súboru, na ktorý odkazuje starý deskriptor súboru.
C// C program to illustrate dup2() #include #include #include #include int main() { int file_desc = open('tricky.txt'O_WRONLY | O_APPEND); // here the newfd is the file descriptor of stdout (i.e. 1) dup2(file_desc 1) ; // All the printf statements will be written in the file // 'tricky.txt' printf('I will be printed in the file tricky.txtn'); return 0; }
Toto je možné vidieť na obrázku nižšie: Nech je súbor 'tricky.txt' pred operáciou dup2() taký, ako je znázornené nižšie:

Po spustení programu C zobrazenom nad súborom 'tricky.txt' je to znázornené nižšie:
Vytvoriť kvíz