Domanda

Ho provato a chiedere sulla mailing list di FUSE, ma non ho ricevuto alcuna risposta finora ... ho un paio di domande. Ho intenzione di implementare un file FUSE di basso livello di sistema e vegliare su di descrittore di fuse_chan con epoll.

  1. Devo inode falsi per tutti oggetti in mio diritto file system? Siamo Ci sono delle regole sulla scelta inodes per gli oggetti in VFS (ad esempio faccio che sia da solo valori positivi o posso usare i valori in un certo intervallo)?

  2. descrittore posso fare di fuse_chan non-blocking? Se sì, la prego di dirmi se posso supporre che fuse_chan_recv() / fuse_chan_send() riceverà / inviare un intera richiesta la struttura, o devo ignorare loro con funzioni di movimentazione invio parziale e ricevere?

  3. Che dire buffer size? capisco in fuse_loop() un nuovo buffer è assegnato per ogni chiamata, quindi immagino che la dimensione del buffer non è fisso. Tuttavia forse c'è qualche massima possibile dimensione del buffer? Posso quindi allocare un buffer più grande e ridurre operazioni di allocazione di memoria.

È stato utile?

Soluzione

(1) Inodes sono definiti come numeri interi senza segno, quindi in teoria, è possibile utilizzare qualsiasi valore. Tuttavia, dal momento che ci potrebbero essere i programmi che non sono attenti, mi piacerebbe giocare sul sicuro e solo per uso diverso da zero, interi positivi fino a INT_MAX.

(2) fusibile utilizza un dispositivo speciale del kernel. Mentre fuse_chan_recv () non supportano legge parziali, questo non può essere richiesto, come kernel non deve restituire i pacchetti parziali in ogni caso.

(3) I nomi dei file in Linux sono max 4096 caratteri. Questo pone un limite la dimensione del buffer:

$ grep PATH_MAX /usr/include/linux/limits.h
#define PATH_MAX        4096    /* # chars in a path name including nul */
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top