dup ()
Dup() sistemos iškvietimas sukuria failo deskriptoriaus kopiją.
- Naujam deskriptoriui naudojamas mažiausio numerio nepanaudotas deskriptorius.
- Jei kopija sukurta sėkmingai, originalo ir kopijos failo aprašai gali būti naudojami pakaitomis.
- Jie abu nurodo tą patį atidaryto failo aprašą ir taip dalijasi failo poslinkio ir failo būsenos vėliavėlėmis.
Sintaksė:
int konvertavimas į eilutę Java
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; }
Atminkite, kad ši programa nebus paleista internetiniame kompiliatoriuje, nes ji apima failo atidarymą ir įrašymą.
Paaiškinimas:
Open() grąžina failo deskriptorių file_desc į failą pavadinimu „dup.txt“. „file_desc“ gali būti naudojamas kai kurioms failų operacijoms atlikti su failu „dup.txt“. Panaudojus dup() sistemos iškvietimą sukuriama failo_desc kopija copy_desc. Ši kopija taip pat gali būti naudojama kai kurioms failų operacijoms atlikti su tuo pačiu failu „dup.txt“. Po dviejų rašymo operacijų viena su file_desc ir kita su copy_desc redaguojamas tas pats failas, ty 'dup.txt'. Prieš paleidžiant kodą Failas „dup.txt“ prieš rašymo operaciją turi būti toks, kaip parodyta toliau:

Paleidus C programą, parodytą aukščiau, failas „dup.txt“ yra toks, kaip parodyta toliau:

dup2 ()
Sistemos iškvietimas dup2() yra panašus į dup(), tačiau pagrindinis skirtumas tarp jų yra tas, kad vietoj mažiausio numerio nepanaudoto failo deskriptoriaus jis naudoja vartotojo nurodytą deskriptoriaus numerį.
Sintaksė:
int dup2(int oldfd int newfd);
oldfd: old file descriptor
newfd new file descriptor which is used by dup2() to create a copy.
Svarbūs punktai:
- Įtraukite antraštės failą unistd.h, kad galėtumėte naudoti dup() ir dup2() sistemos iškvietimą.
- Jei deskriptorius newfd anksčiau buvo atidarytas, jis tyliai uždaromas prieš pakartotinai naudojant.
- Jei oldfd nėra tinkamas failo aprašas, skambutis nepavyksta ir newfd neuždaromas.
- Jei oldfd yra tinkamas failo aprašas, o newfd reikšmė tokia pati kaip oldfd, tada dup2() nieko nedaro ir grąžina newfd.
Sudėtingas dup2() sistemos iškvietimo naudojimas:
java pagrindinis
Kaip ir dup2() vietoje newfd galima įdėti bet kokį failo aprašą. Žemiau yra C įgyvendinimas, kuriame naudojamas standartinės išvesties failo deskriptorius (stdout). Dėl to visi printf() teiginiai bus įrašyti į failą, nurodytą senojo failo deskriptoriaus.
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; }
Tai galima pamatyti toliau pateiktame paveikslėlyje: Tegul failas „tricky.txt“ prieš dup2() operaciją turi būti toks, kaip parodyta toliau:

Paleidus C programą, parodytą aukščiau, failas „tricky.txt“ yra toks, kaip parodyta toliau:
Sukurti viktoriną