Swisslinux.org

− Le carrefour GNU/Linux en Suisse −

 

Langue

 

Le Forum

Vous n'êtes pas identifié.

#1 30 May 2007 23:01:45

[GO]Skywalker13
Modérateur
Lieu: Choëx (VS)
Date d'inscription: 05 Oct 2004
Messages: 896
Site web

[C] Fuse (Résolu)

Hello, je recherche de la documentation sur Fuse d'un point de vue développement.. j'ai déjà bossé quelque peu dessus avec le peu de doc que j'ai trouvé sur la toile.. avec la version de fuse-2.5.x ca marchait pas mal (enfin il me semble). Mais depuis le 2.6.x j'ai des choses vraiment bizarres et aléatoires..  bref c'est indebuggable. Comme par exemple, dans mon système monté avec fuse.. si j'affiche un jpg, j'ai aléatoirement de la merde sur l'image.. ou alors celle-ci se déforme..  bref on dirait que la zone mémoire n'a pas été allouée et que j'ai alors du bruit..  mais si au moins je pouvais chopper un segfault.. mais même pas..

J'utilise une fonction de ce genre :

Code:

static int fos_read(const char *path, char *buf, size_t size,
                    off_t offset, struct fuse_file_info *fi)
{
  int length;
  char *buf_tmp;
  s_fosfat_file *file;

  (void)fi;

  /* Get the stats and test if it is a file */
  if ((file = fosfat_get_stat(dev, path)) && !file->att.isdir) {
    length = file->size;
    /* Fix the size in function of the offset */
    if (offset + (signed)size > length)
      size = length - offset;
    /* Read the data */
    buf_tmp = fosfat_get_buffer(dev, path, offset, size);
    /* Copy the data for FUSE */
    if (buf_tmp) {
      memcpy(buf, buf_tmp, size);
      free(buf_tmp);
    }
    else
      return -ENOENT;
  }
  else
    return -ENOENT;
  return size;
}

Afin de récupérer des datas.. Ce que je cherche vraiment comme doc c'est l'explication complète de la fonction read() qui doit être implémentée pour Fuse..

En fait j'ai implémenté le stricte minimum:

Code:

/** FUSE implemented functions */
static struct fuse_operations fosfat_oper = {
  .getattr = fos_getattr,
  .readdir = fos_readdir,
  .open    = fos_open,
  .read    = fos_read,
};

Concernant le read j'ai trouvé des infos mais ca date d'un vieux fuse.. genre 2.2..  même que le helloworld chez Fuse n'est plus d'actualité car il n'a pas été adapté 2.6.. ce qui nécessite un -DFUSE_USE_VERSION=25 pour le faire passer. Et si je recompile ma lib en 25 ca ne change rien au problème..  faudrait que je reteste avec le dernier fuse-2.5.x.

Alors si qqun maitrise cette lib, j'en serais vraiment heureux :-)


Mathieu SCHROETER
log.schroetersa.ch

Hors ligne

 

#2 01 Jun 2007 10:16:03

jean@adimp.ch
Illuminé(e)
Lieu: Marly
Date d'inscription: 10 Mar 2005
Messages: 1228
Site web

Re: [C] Fuse (Résolu)

Salut,
  Ils ont une liste de diffusion "fuse-devel" qui sera certainement plus à même de te répondre : https://lists.sourceforge.net/lists/listinfo/fuse-devel
A+:


--------------------------------------------------------
Jean Tinguely Awais
Ma vie sur twitter : http://www.twitter.com/tservi

Hors ligne

 

#3 20 Jun 2007 21:18:17

[GO]Skywalker13
Modérateur
Lieu: Choëx (VS)
Date d'inscription: 05 Oct 2004
Messages: 896
Site web

Re: [C] Fuse (Résolu)

Problème corrigé (enfin).. c'était bien sûr une connerie mais ça m'a pris un plomb à la trouver...  Fuse se charge pas défaut en multi-thread et ça fout une belle merde si vous ne prévoyez pas le coup. Ainsi il suffit de demander à Fuse de se charger en single à l'aide de l'option "-s" et tout roule :-).

http://svn.gna.org/viewcvs/fosfat/trunk … fosmount.c


Mathieu SCHROETER
log.schroetersa.ch

Hors ligne

 

Pied de page des forums

Powered by FluxBB