Frage

Im Moment arbeite ich an einem Projekt, das in verschiedene Systemaufrufe Haken und schreibt Dinge in ein Protokoll, in dem je ein genannt wurde. So zum Beispiel, wenn ich die Berechtigungen einer Datei zu ändern, schreibe ich einen wenig Eintrag in eine Protokolldatei, die die alte Erlaubnis und neue Berechtigungsspuren. Allerdings bin ich ein paar Probleme mit genau Fesselung, wo ich beobachten sollte. Für das obige Beispiel, sagt mir, strace, dass der „chmod“ Befehl, um den Systemaufruf sys_fchmodat verwendet (). Allerdings gibt es auch eine sys_chmod () und ein sys_fchmod ().

Ich bin sicher, dass die Kernel-Entwickler wissen, was sie tun, aber ich frage mich: Was ist der Sinn dieser alle (scheinbar) redundante Systemaufrufe, und gibt es eine Regel, auf denen diejenigen für das, was verwendet werden? (D sind die „at“ syscalls oder solche mit dem Präfix „f“ bedeutet, etwas Bestimmtes zu tun?)

War es hilfreich?

Lösung

Ja, es gibt einige Namensregeln.

  • chmod nimmt einen Dateinamen, während fchmod einen Dateideskriptor nimmt. Das Gleiche gilt für stat vs fstat.
  • fchmodat nimmt ein Dateideskriptor / filename Paar (Dateideskriptor für das Verzeichnis und die Dateinamen für die Dateinamen innerhalb des Verzeichnisses). Das Gleiche gilt für andere * bei Anrufen; finden Sie in der NOTES Abschnitt http://kerneltrap.org/man/linux/man2/openat 0,2 für eine Erklärung.

Andere Tipps

Geschichte: -)

Sobald ein Systemaufruf erstellt wurde, es nicht immer geändert werden kann, also wenn neue Funktionalität einen neuen Systemaufruf erforderlich ist, wird erstellt. (Natürlich bedeutet dies, gibt es eine sehr hohe Bar, bevor ein neuer Systemaufruf erstellt wird).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top