Działanie funkcji operujących na deskryptorach plików

0

Cześć.
Wyobraźmy sobie, że mamy takie funkcje:

int Otworz(void);
int Zamknij(int fd);

Oraz taki kod:

int des1 = Otworz();
int des2 = Otworz()

Zamknij(des1);
Zamknij(des2);

Skąd funkcja Zamknij(int) wie, czym dokładnie jest wartość zwrócona przez funkcję Otworz(void)?

0

Nie bardzo rozumiem pytanie. Może przeczytaj co to jest deskryptor pliku? Chyba ze pytasz "skąd Zamknij() wie że dostało deskryptor a nie jakiegośtam inta", jeśli o to pytasz to odpowiedź jest prosta: nie wie, zakłada że programista jej nie oszukuje ;]

0

W informatyce deskryptor pliku to unikatowy identyfikator pliku wykorzystywany przez system operacyjny. Po wykonaniu operacji otwarcia pliku, deskryptor pliku może być wykorzystywany wielokrotnie przez funkcje systemowe w operacjach wejścia/wyjścia.

Ogólnie deskryptor pliku to klucz do przechowywanej przez jądro struktury danych zawierającej informacje o wszystkich otwartych plikach

Więc chodzi mi o część bardziej praktyczną jak to jest zrobione. Tzn. skąd funkcja Zamknij() wie, gdzie szukać takiej struktury?
Chciałbym sobie napisać bibliotekę A, w której skład wejdzie:

int Otworz()
{
// sprawdzi, który deskryptor jest wolny i zwróci go
// już jako zarezerwowany dla pliku, który ma otworzyć
}

int Zamknij()
{
// zamknie plik otwarty przez Otworz() i zwolni deskryptor
}

Tylko pytanie, gdzie ja mam te deskryptory przechowywać?

0

Tzn. skąd funkcja Zamknij() wie, gdzie szukać takiej struktury?
skądś. podawany int (deskryptor) może być np. indeksem do jakiejś tablicy (do której nie mamy bezpośredniego dostępu) albo zakamuflowanym wskaźnikiem na właściwą strukturę. ideą deskryptorów jest to, że wewnętrzna ich budowa nas nie interesuje: wszystko co mamy na zewnątrz to po prostu int. a wewnątrz procedury Zamknij() może być to zaimplementowane na dowolny sposób.

1 użytkowników online, w tym zalogowanych: 0, gości: 1