odczyt (2) i zapis (2) działają zarówno na deskryptorze gniazda, jak i deskryptorze pliku. W przypadku deskryptora pliku, tabeli deskryptorów plików użytkownika-> tabeli plików, a na końcu do tabeli i-węzłów, w której sprawdza typ pliku (zwykły plik/znak/blok) i odpowiednio czyta. W przypadku pliku char-spl pobiera wskaźniki funkcji w oparciu o główny numer pliku z przełącznika urządzenia char i wywołuje odpowiednie procedury odczytu/zapisu zarejestrowane dla tego urządzenia. Podobnie stosowna procedura odczytu/zapisu jest wywoływana dla pliku specjalnego bloku, pobierając wskaźniki funkcji z przełącznika urządzenia blokowego.deskryptor gniazda vs deskryptor pliku
Czy mógłbyś proszę dać mi znać, co się dzieje podczas odczytu/zapisu na deskryptorze gniazda. Jeśli odczyt/zapis działa na deskryptorze gniazda, nie możemy użyć deskryptora open zamiast socket'a?
Nie można powiedzieć ** ** dokładnie, co się dzieje (spróbuj poszukać u źródła jądra, jeśli naprawdę chcesz wiedzieć), ale zasadniczo to minie wniosek do sterownika TCP, który przekaże go dalej w dół stosu sieciowego, aż dotrze do sterownika karty sieciowej. Jeśli chcesz wiedzieć, co każda warstwa stosu sieciowego ma w ogóle, spójrz na model * OSI *. Jeśli chodzi o 'open' vs' socket': przyjmują różne argumenty, ponieważ informacje, które należy podać, różnią się w zależności od tego, czy chcesz otworzyć plik, czy gniazdo. – David
Chcę wiedzieć, jaka jest struktura danych przydzielona na wywołanie socket(), jakie informacje są przechowywane w tabeli i-węzłów, w jaki sposób w końcu sięga ona do podprogramów sterownika karty sieciowej podczas wywoływania odczytu/zapisu –
Uwaga: odczytywanie/zapisywanie wywołania systemowego. Większość zadań jest wykonywana w przestrzeni jądra. to rodzaj abstrakcji, czyli "wirtualizacja": po prostu weź plik blokowy, gniazdo lub wiele innych rzeczy, jako "plik". plik ma operacje takie jak: odczyt, zapis, otwarcie itd. Ale prawdziwa implementacja odczytu gniazda lub odczytywania pliku dysku jest zdefiniowana w jądrze. Możesz nawet zdefiniować "zapis" do odczytu z pliku, jeśli potrzebujesz. – tristan