Forum: Compiler & IDEs Funktionsaufruf zur Laufzeit "ändern"


von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Hallo Leute, ich weiss einfach nicht nach was ich da noch suchen kann, 
das bisschen was mir einfiel, brachte mich nicht weiter...

Ich möchte ein struct haben, in dem in verschiedene Variablen die 
Funktionen geschrieben werden und die jeweilige dann aufgerufen wird.

Wie zum Beispiel, beim Linux Kernel wenn man mit einem /dev-Eintrag 
arbeitet:
1
static struct file_operations fops = {
2
        .read = vfd_read,
3
        .write = vfd_write,
4
        .open = vfd_open,
5
        .release = vfd_release,
6
        .ioctl = vfd_ioctl
7
};
Dieses struct ist glaube ich in der <linux/filesystems.h> oder so, auf 
jeden Fall wird nach dem erstellen der Gerätedatei jedesmal beim öffnen 
der Gerätedatei die Funktion vfd_read() aufgerufen. Da könnte ich aber 
genauso gut bla hinschreiben und er würde die Funktion  bla() aufrufen.

Ich hoffe mir kann ja jemand einen Tip geben :)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Was du willst, ist ein Funktionspointer.

http://www.mbernstein.de/atari/prog/kurse/c-kurs/0a08.htm

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Nils S. schrieb:

> ..., auf
> jeden Fall wird nach dem erstellen der Gerätedatei jedesmal beim öffnen
> der Gerätedatei die Funktion vfd_read() aufgerufen.

Genauer gesagt: es wird fops->read() aufgerufen.  Das ist zwar so
initialisiert, dass es vfd_read() aufrufen würde dabei, aber den
Zeiger fops->read könnte man zur Laufzeit auch anders zuweisen.

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Vielen Dank für eure Hilfe, das Stichwort Funktionspointer hat mir 
gefehlt :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.