dup()
Systemanropet dup() skapar en kopia av en filbeskrivning.
- Den använder den lägsta numrerade oanvända deskriptorn för den nya deskriptorn.
- Om kopian har skapats framgångsrikt kan original- och kopiafilbeskrivningarna användas omväxlande.
- De hänvisar båda till samma öppna filbeskrivning och delar därmed filoffset och filstatusflaggor.
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; }
Observera att det här programmet inte kommer att köras i onlinekompilatorn eftersom det inkluderar att öppna en fil och skriva på den.
Förklaring:
hur många veckor på en månad
Open() returnerar en filbeskrivning file_desc till filen som heter 'dup.txt'. file_desc kan användas för att utföra vissa filoperationer med filen 'dup.txt'. Efter att ha använt dup()-systemanropet skapas en kopia av file_desc copy_desc. Denna kopia kan också användas för att utföra en filoperation med samma fil 'dup.txt'. Efter två skrivoperationer, en med file_desc och en annan med copy_desc redigeras samma fil, dvs 'dup.txt'. Innan du kör koden Låt filen 'dup.txt' före skrivoperationen vara som visas nedan:

Efter att ha kört C-programmet som visas ovan är filen 'dup.txt' som visas nedan:

dup2()
Systemanropet dup2() liknar dup() men den grundläggande skillnaden mellan dem är att istället för att använda den lägsta numrerade oanvända filbeskrivningen använder den deskriptornumret som anges av användaren.
Syntax:
int dup2(int oldfd int newfd);
oldfd: old file descriptor
newfd new file descriptor which is used by dup2() to create a copy.
Viktiga punkter:
- Inkludera rubrikfilen unistd.h för att använda dup() och dup2() systemanrop.
- Om deskriptorn newfd tidigare var öppen stängs den tyst innan den återanvänds.
- Om oldfd inte är en giltig filbeskrivning misslyckas samtalet och newfd stängs inte.
- Om oldfd är en giltig filbeskrivning och newfd har samma värde som oldfd gör dup2() ingenting och returnerar newfd.
En knepig användning av dup2() systemanrop:
Som i dup2() i stället för newfd kan vilken filbeskrivning som helst sättas. Nedan finns en C-implementering där filbeskrivningen för Standard output (stdout) används. Detta leder till att alla printf()-satser skrivs i filen som hänvisas till av den gamla filbeskrivningen.
s i pythonC
// 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; }
Detta kan ses i figuren nedan: Låt filen 'tricky.txt' före dup2()-operationen vara som visas nedan:

Efter att ha kört C-programmet som visas ovan är filen 'tricky.txt' som visas nedan:
Skapa frågesport