дуп ()
Системното извикване dup() създава копие на файлов дескриптор.
- Той използва неизползвания дескриптор с най-нисък номер за новия дескриптор.
- Ако копието е създадено успешно, дескрипторите на оригиналния и копирания файл могат да се използват взаимозаменяемо.
- И двете препращат към едно и също описание на отворен файл и по този начин споделят флагове за отместване на файла и състояние на файла.
Синтаксис:
сортиране на arraylist 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; }
Имайте предвид, че тази програма няма да работи в онлайн компилатора, тъй като включва отваряне на файл и писане върху него.
Обяснение:
Open() връща файлов дескриптор file_desc към файла с име „dup.txt“. file_desc може да се използва за извършване на някаква файлова операция с файл 'dup.txt'. След използване на системното извикване dup() се създава копие на file_desc copy_desc. Това копие може също да се използва за извършване на файлова операция със същия файл 'dup.txt'. След две операции за запис, една с file_desc и друга с copy_desc, същият файл се редактира, т.е. „dup.txt“. Преди стартиране на кода Нека файлът 'dup.txt' преди операцията за запис да бъде както е показано по-долу:
разлика между масив и arraylist

След стартиране на C програмата, показана по-горе, файлът „dup.txt“ е както е показано по-долу:

dup2()
Системното извикване dup2() е подобно на dup(), но основната разлика между тях е, че вместо да използва неизползвания файлов дескриптор с най-нисък номер, той използва номера на дескриптора, зададен от потребителя.
Синтаксис:
int dup2(int oldfd int newfd);
oldfd: old file descriptor
newfd new file descriptor which is used by dup2() to create a copy.
Важни точки:
байтов масив към низ
- Включете заглавния файл unistd.h за използване на системно извикване dup() и dup2().
- Ако дескрипторът newfd е бил преди това отворен, той се затваря тихо, преди да бъде използван повторно.
- Ако oldfd не е валиден файлов дескриптор, тогава извикването е неуспешно и newfd не се затваря.
- Ако oldfd е валиден файлов дескриптор и newfd има същата стойност като oldfd, тогава dup2() не прави нищо и връща newfd.
Трудно използване на системно извикване dup2():
Както в dup2() на мястото на newfd може да се постави произволен файлов дескриптор. По-долу е реализация на C, в която се използва файловият дескриптор на стандартния изход (stdout). Това ще накара всички оператори printf() да бъдат записани във файла, посочен от стария файлов дескриптор.
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; }
Това може да се види на фигурата, показана по-долу: Нека файлът 'tricky.txt' преди операцията dup2() да бъде както е показано по-долу:

След стартиране на C програмата, показана по-горе, файлът "tricky.txt" е както е показано по-долу:
Създаване на тест