Ich habe die Systemaufruf-Tabelle so geändert, dass mein eigener mmap-Handler bei einem User-Space-Aufruf aufgerufen wird zu mmap. Mein Handler ruft die ursprüngliche mmap auf und wählt entsprechend dem Ergebnis, was zu tun ist.Ermitteln, ob eine Dateistruktur (Beschreiben eines Dateideskriptors) eine 'spezielle Datei' ist (dh Block/Zeichen)
Hier ist ein sehr kurzer Code-Schnipsel:
asmlinkage unsigned long my_mmap_handler(unsigned long addr,
unsigned long len,
int prot,
int flags,
int fd,
long off)
{
unsigned long ret_val = old_mmap(addr,len,prot,flags,fd,off);
if (IS_ERR((void*)ret_val))
goto end;
// Do some stuff..
end:
return ret_val;
}
während in „ein paar Sachen tun“ Ich habe einige Operationen auf der tatsächlichen mapped-Datei (das heißt aus der Datei zu lesen).
Hier ist das Problem:
ich Programme gestoßen, die versuchen, Zeichen/Block-Geräte mmap (z/dev/rdi/card0). Immer wenn ich versuche, aus einer solchen Datei zu lesen (z. B. mit vfs_read), friert der Kernel ein (keine Panik, aber es fühlt sich an, als würde etwas blockieren). Warum genau passiert das? Wie auch immer, ich brauche keine Operationen auf Zeichen/Block-Geräten, also habe ich versucht herauszufinden, ob eine gegebene 'struct-Datei' ein Block/Zeichen-Gerät darstellt und falls es ignoriert wird . Bisher kein Glück.
würde Hilfe
Sie [ 'Mann fstat'] Suchen (http://linux.die.net/ Mann/2/fstat)? – usr2564301