dup()
A dup() rendszerhívás létrehozza a fájlleíró másolatát.
- A legalacsonyabb számú nem használt leírót használja az új leíróhoz.
- Ha a másolatot sikeresen létrehozták, akkor az eredeti és a másolatfájl leírója felcserélhetően használható.
- Mindkettő ugyanarra a nyitott fájlleírásra hivatkozik, és így megosztják a fájl eltolást és a fájl állapotjelzőit.
Szintaxis:
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; }
Vegye figyelembe, hogy ez a program nem fog futni az online fordítóprogramban, mivel magában foglalja egy fájl megnyitását és írását.
Magyarázat:
Az open() a file_desc fájlleírót adja vissza a 'dup.txt' fájlnak. A file_desc használható néhány fájlművelet végrehajtására a „dup.txt” fájllal. A dup() rendszerhívás után létrejön a file_desc másolata copy_desc. Ez a másolat bizonyos fájlműveletek végrehajtására is használható ugyanazzal a „dup.txt” fájllal. Két írási művelet után az egyik a file_desc, a másik a copy_desc fájl szerkesztése, azaz a 'dup.txt'. A kód futtatása előtt Legyen a „dup.txt” fájl az írási művelet előtt az alábbiak szerint:

A fent látható C program futtatása után a „dup.txt” fájl az alábbiak szerint jelenik meg:

dup2()
A dup2() rendszerhívás hasonló a dup()-hoz, de az alapvető különbség közöttük az, hogy a legalacsonyabb számú nem használt fájlleíró helyett a felhasználó által megadott leírószámot használja.
Szintaxis:
int dup2(int oldfd int newfd);
oldfd: old file descriptor
newfd new file descriptor which is used by dup2() to create a copy.
Fontos pontok:
- Szerelje be az unistd.h fejlécfájlt a dup() és dup2() rendszerhívás használatához.
- Ha a newfd leíró korábban nyitva volt, akkor az újrafelhasználás előtt csendben bezáródik.
- Ha az oldfd nem érvényes fájlleíró, akkor a hívás meghiúsul, és a newfd nem záródik be.
- Ha az oldfd egy érvényes fájlleíró, és a newfd értéke megegyezik az oldfd értékével, akkor a dup2() nem csinál semmit, és a newfd értéket adja vissza.
A dup2() rendszerhívás trükkös használata:
A dup2()-hez hasonlóan a newfd helyére tetszőleges fájlleíró tehető. Az alábbiakban egy C megvalósítás látható, amelyben a szabványos kimenet (stdout) fájlleíróját használják. Ez arra készteti, hogy az összes printf() utasítás a régi fájlleíró által hivatkozott fájlba kerüljön.
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; }
Ez látható az alábbi ábrán: Legyen a dup2() művelet előtti 'tricky.txt' fájl az alábbiak szerint:

A fent látható C program futtatása után a „tricky.txt” fájl az alábbiak szerint jelenik meg:
Kvíz létrehozása