Frage

Ich habe versucht, die Mailingliste von Fuse zu fragen, aber bisher habe ich keine Antwort erhalten ... Ich habe ein paar Fragen. Ich werde ein niedriges Sicherungsdateisystem auf niedrigem Niveau implementieren und mich wachen fuse_chan's Deskriptor mit Epoll.

  1. Ich muss Inodes für alle Objekte in meinem Dateisystem fälschen, oder? Gibt es Regeln für die Auswahl von Inodes für Objekte in VFs (z. B. muss ich nur positive Werte verwenden oder kann ich Werte in einem Bereich verwenden)?

  2. Kann ich Fuse_Chans Deskriptor nicht blockieren lassen? Wenn ja, sagen Sie mir bitte, ob ich das annehmen kannfuse_chan_recv()/fuse_chan_send()Wird/senden Sie eine ganze Anforderungsstruktur, oder muss ich sie mit Funktionen überschreiben, die teilweise Senden und Empfangen bearbeiten?

  3. Wie wäre es mit buffer size? Ich sehe das in fuse_loop() Für jeden Anruf wird ein neuer Puffer zugewiesen, daher gehe ich davon aus, dass die Puffergröße nicht festgelegt ist. Vielleicht gibt es jedoch eine maximal mögliche Puffergröße? Ich kann dann einen größeren Puffer zuweisen und Speicherzuweisungsvorgänge reduzieren.

War es hilfreich?

Lösung

(1) Inodes werden als nicht signierte Ganzzahlen definiert, sodass Sie theoretisch alle Werte verwenden können. Da es jedoch Programme geben könnte, die nicht aufmerksam sind, würde ich auf Nummer sicher gehen und nur ungleich Null-positive Ganzzahlen bis int_max verwenden.

(2) Die Sicherung verwendet ein spezielles Kernelgerät. Während fuse_chan_recv () keine partiellen Lesevorgänge unterstützen, ist dies möglicherweise nicht erforderlich, da Kernel ohnehin keine Teilpakete zurückgeben sollte.

(3) Dateinamen in Linux sind max. 4096 Zeichen. Dadurch wird eine Puffergröße begrenzt:

$ grep PATH_MAX /usr/include/linux/limits.h
#define PATH_MAX        4096    /* # chars in a path name including nul */
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top