2009-08-30 13 views
7

Czy ktoś wie, jaka jest różnica między mmap(2) i mmap(3)? Sekcja 3 man jest opisana jako "Ten rozdział opisuje wszystkie funkcje biblioteki, z wyjątkiem funkcji bibliotecznych opisanych w rozdziale 2, które implementują wywołania systemowe." Czy mmap(3) nie wykonuje wywołania systemowego?mmap (2) vs mmap (3)

Podczas czytania dwóch stron podręcznika widzę, że mmap(2) wydaje się akceptować znacznie szerszą gamę flag niż mmap(3) i twierdzi, że jest w stanie mapować przestrzenie we/wy urządzenia. mmap(3) twierdzi, że może dodawać do plików "obiekty pamięci współużytkowanej" i "typowane obiekty pamięci", ale nie wspomina o urządzeniu I/O.

Ponieważ te dwie funkcje mają tę samą nazwę, nie jestem nawet pewien, czy mogę wybrać jeden, a nie drugi.

Odpowiedz

18

mmap(3) ma być POSIX function. Powinien on pod każdym względem zapewniać samą semantykę, którą wymaga POSIX, nawet jeśli odbiega od tego, co Linux robi "natywnie". mmap(2) to wywołanie systemowe i zapewnia wszystkie dzwonki i gwizdki, które Linus uważa za ważne. Funkcja biblioteki C jest oczywiście zaimplementowana za pomocą wywołania systemowego.

Aby wywołać wywołanie systemowe dosłownie (omijając bibliotekę C), można użyć <sys/syscall.h>.

Rzeczywistą implementację mmap (3) można znaleźć w C library. Jak widać, zwykle przekazuje sterowanie bezpośrednio do mmap (2), chyba że w czasie kompilacji (glibc), mmap2 (2) został wybrany jako "back-end".

+0

Dziękuję, to było bardzo jasne. Dziękuję również za wskaźnik do drzewa źródłowego biblioteki C. Mimo, że wykonuję sporo pracy na poziomie jądra i sterowników, rzadko wypuszczam się w przestrzeń użytkownika dla czegokolwiek innego niż narzędzia testowe, a ja nie szukałem w ogóle źródła glibc. Widzę, że brakowało mi bardzo przydatnego podejścia do wielu problemów. – EQvan

Powiązane problemy