logo

dup() ir dup2() Linux sistemos iškvietimas

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);     
oldfd: old file descriptor whose copy is to be created.
C
// 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:

dup() ir dup2() Linux sistemos iškvietimas

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

dup() ir dup2() Linux sistemos skambutis

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:

dup() ir dup2() Linux sistemos skambutis

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

dup() ir dup2() Linux sistemos iškvietimas Sukurti viktoriną