dup()
tworzy duplikat istniejacego deskryptora pliku i przekazuje numer
nowego deskryptora zwiazanego z tym samym plikiem lub laczem.
Oba deskryptory dziela ten sam wskaznik do tablicy plikow.
Funkcja gwarantuje zwrot dostepnego deskryptora pliku o najnizszym
numerze.Poniwaz oba deskryptory wskazuja na ten sam plik jedyna korzysc
jaka mozna czerpac z zastosowanuia funkcji dup()
jest taka ,ze
deskryptory maja rozne numery.Pozwala to np. zmieniac standardowe lacza do
pisania,czytania lub wyjscie na blad.
DEFINICJA:Argumentem funkcji jest deskryptor pliku,ktory chcemy zduplikowac.int dup(int oldfd)
WYNIK: 0 w przypadku sukcesu oraz na zmiennejstat_buf
zapisuje status pliku -1 w przypadky bledu oraz na zmiennej errno: EBADF (bledny numer pliku) EMFILE (za duzo otwartych plikow)
Implementacja funkcji:
{
sprawdz legalnosc deskryptora oldfd(tzn. czy nie jest wiekszy
od 256 oraz czy wskazyje na jakis plik);
znajdz pierwszy wolny deskryptor w tablicy deskryptorow plikow uzytkownika;
skopiuj deskryptor oldfd
do znalezionej pozycji;
w tablicy plikow zwieksz o 1 licznik dowiazan z tablicy deskryptorow;
zwroc znaleziony deskryptor;
}
fs/fcntl.c
(implementacja).