Comment obtenir la taille totale du fichier lors de l'écriture par fusible
Je développe un système de fichiers basé sur fuse. mais éprouve des difficultés lors du développement.
Ma question est «comment obtenir la taille totale du fichier lorsque fuse_write».
dans fuse_write,
static int test_fuse_write(const char *path, const char *buf, size_t size,
off_t offset, struct fuse_file_info *fi)
ces arguments ne sont pas liés au fichier source. uniquement lié au fichier de destination. Je veux une taille totale de fichier.
par exemple, lors de la copie du fichier «A» dans le système de fichiers ext4 vers le fichier «B» dans le système de fichiers fuse. si la taille du fichier «A» est de 12 Mo, lorsque la fonction fuse_write est appelée pour la première fois, y a-t-il un moyen de connaître la taille du fichier (12 Mo)?
Je suis désolé de ne pas maîtriser l'anglais.
La réponse est non.
Indépendamment du système de fichiers fusible, l' écriture est une opération du système de fichiers tandis que la "copie" est un utilitaire utilisateur (ex. Cp sous Unix). L'utilitaire de copie exécute les opérations de lecture sur le fichier source et les opérations d' écriture sur le fichier de destination. Les lectures et les écritures sont "inconscientes" l'une de l'autre. Vous pouvez creuser dans le code source de cp
Plus jamais, toutes les opérations de lecture et d' écriture effectuées par un utilitaire utilisateur sont divisées par le noyau en morceaux conséquents de même taille (ex. 64K). Ainsi, une opération d'écriture de données d'une longueur de quelques mégaoctets sera vue dans votre implémentation de la fonction d'écriture par fusible comme une série d'appels conséquents (disons) de 64K de longueur.
Vous devriez être encouragé par le fait que c'est exactement le type d'illumination que vous atteignez lors de l'écriture d'un système de fichiers fusible ...