cacheflush(2) System Calls Manual cacheflush(2) NAZWA cacheflush - wyproznia zawartosc bufora podrecznego z instrukcjami i/lub z danymi BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include int cacheflush(void addr[.nbytes], int nbytes, int cache); Uwaga: Na niektorych architekturach nie istnieje opakowanie glibc dla tego wywolania systemowego, zob. UWAGI. OPIS cacheflush() wyproznia zawartosc wskazanego(-ych) bufora(-ow) podrecznego(-ych) dla adresow przestrzeni uzytkownika w zakresie od addr to (addr+nbytes-1). Parametr cache moze byc jednym z: ICACHE Wyproznia bufor z instrukcjami. DCACHE Zapisuje z powrotem do pamieci i uniewaznia dotkniete tym prawidlowe linie buforowe. BCACHE Identyczne z (ICACHE|DCACHE). WARTOSC ZWRACANA cacheflush() zwraca 0 po pomyslnym zakonczeniu. W przypadku bledu zwraca -1 i ustawia errno wskazujac jego rodzaj. BLEDY EFAULT Czesc lub cala przestrzen od addr do (addr+nbytes-1) jest niedostepna. EINVAL cache nie jest jednym z ICACHE, DCACHE lub BCACHE (lecz zob. USTERKI). WERSJE cacheflush() nie powinien byc uzywany przez przenosne programy. W Linuksie, wywolanie to pojawilo sie poczatkowo na architekturze MIPS, lecz obecnie Linux udostepnia wywolanie systemowe cacheflush() na niektorych z innych architektur, lecz z odmiennymi argumentami. Warianty na roznych architekturach glibc udostepnia opakowanie dla tego wywolania systemowego, z prototypem pokazanym w SKLADNI, dla nastepujacych architektur: ARC, CSKY, MIPS i NIOS2. Na niektorych z innych architektur, Linux udostepnia to wywolanie systemowe, ale z innymi argumentami: M68K: int cacheflush(unsigned long addr, int scope, int cache, unsigned long len); SH: int cacheflush(unsigned long addr, unsigned long len, int op); NDS32: int cacheflush(unsigned int start, unsigned int end, int cache); Na powyzszych architekturach glibc nie udostepnia opakowania dla tego wywolania systemowego; nalezy je wywolac za pomoca syscall(2). Alternatywa GCC O ile nie jest konieczne dokladniejsza kontrola udostepniania przez to wywolanie systemowe, prawdopodobnie powinno sie korzystac z wbudowanej funkcji GCC __builtin___clear_cache(), ktora zapewnia przenosny interfejs dzialajacy na wszystkich platformach obslugiwanych przez GCC i na kompatybilnych kompilatorach. void __builtin___clear_cache(void *begin, void *end); Na platformach, ktore nie wymagaja opozniania buforow, __builtin___clear_cache() nie daje efektow. Uwaga: Na niektorych kompilatorach kompatybilnych z GCC, prototyp tej wbudowanej funkcji uzywa dla parametrow char * zamiast void *. STANDARDY Historycznie, niniejsze wywolanie systemowe bylo dostepne we wszystkich wariantach uniksowych na platformie MIPS, w tym na RISC/os, IRIX, Ultrix, NetBSD, OpenBSD i FreeBSD (oraz na niektorych nieuniksowych systemach operacyjnych dzialajacych na MIPS), zatem istnienie tego wywolania w MIPS-owych systemach operacyjnych jest faktycznym standardem. USTERKI Jadro Linux w wersji starszej niz Linux 2.6.11 ignoruje parametry addr i nbytes, co czyni te funkcje dosc kosztowna. Dlatego zawsze wyprozniane sa wszystkie bufory. Funkcja zachowuje sie zawsze w sposob, jak gdyby argumentem cache byl BCACHE i nie dokonuje zadnego sprawdzenia pod katem bledow parametru cache. TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Przemek Borys , Andrzej Krzysztofowicz i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. cacheflush(2)