Question

J'essaie d'utiliser O_Direct pour ouvrir un fichier et nous utilisons JFFS2

fd = open(filename, O_RDONLY|O_DIRECT|O_SYNC);

Mais je n'obtiens qu'une erreur "argument non valide". J'ai aussi essayé les solutionsDans ce lien so mais en vain. Bien sûr, j'ai également installé "-d_gnu_source" dans la construction de la source.

J'ai lu que O_Direct n'est pas pris en charge sur TMPFS, mais je n'ai pas pu trouver de support ou de non-soutien pour JFFS2. Si quelqu'un pouvait me donner des preuves ou sans interruption pour le support JFFS2 et / ou toute autre chose qui me manque pour faire fonctionner O_Direct.

Remarque: Tout cela s'est produit parce que Linux semble mettre en cache les données de mémoire en soi lorsque j'utilise fread () / read (). Et en utilisant system("echo 3 > /proc/sys/vm/drop_caches"); Serait trop tard parce que je ne veux pas que le FS alloue la mémoire de cache en premier lieu.

Merci, Naze

Était-ce utile?

La solution

JFFS2 ne prend pas en charge O_DIRECT.

Tu peut voir dans __dentry_open() que pour soutenir O_DIRECT, un système de fichiers doit fournir le direct_IO et / ou get_xip_mem membres de address_space_operations structure Vous pouvez également voir que JFFS2 ne fournit pas ces membres.

Il n'est pas clair pourquoi vous êtes si désireux d'éviter le cache de la page. Les pages du cache de page sont effectivement "gratuites" - elles seront récupérées lorsque plus de mémoire est requise pour d'autres utilisations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top