Forum Programmation.c++ Manipulation de fichiers et système de fichiers virtuels

Posté par  .
Étiquettes : aucune
0
19
juin
2006
Bonjour,

J'ai quelques soucis pour manipuler de manière efficace des fichiers entre 2 applications sous linux.

Le principe est que les informations partagées entre les 2 applications sont mises dans des fichiers, sur un système de fichiers virtuels (RAMFS) afin qu'il ne soit pas physiquement sur le disque mais bien dans la RAM.

Le premier truc que je recherche serait de savoir si il est possible de passer des appels systèmes, des signaux ou un truc du style, pour que quand un fichier soit modifié dans une des applications, l'autre application le remarque automatiquement sans devoir reconsulter régulièrement tous les fichiers.

La seconde question concerne les système de fichier virtuel. Jusqu'ici, il faut être root pour pouvoir créer un système de fichier virtuel. Hors, j'aimerai que ceci soit possible pour un utilisateur lambda. Si il a des restriction sur l'endroit ou se trouvera ce système de fichiers virtuels ou sur les utilisateurs qui y auront accès (ou je ne sais quoi d'autre), ce n'est pas grave.
  • # Shared memory

    Posté par  (site web personnel) . Évalué à 2.

    Heu, je comprend pas trop l'intérêt de faire ton fichier en ramfs (tu nous donne ni la taille, ni l'utilisation)

    Ce que je te conseille, est de faire un shm (shared memory), ça te permet de mettre un segment de donnée en ram, après il te suffit d'avoir la même clef dans les deux programmes et ils peuvent la partager...

    une autre possibilité si c'est juste entre deux programmes est de créer un tube ou une pile de message entre les deux et de passer les fichiers a relire.

    Pense a coupler les shm avec des verroux de lecture/écriture pour éviter les ennuis.

    Bon ça tu le trouvera dans un bouquin de prog en C/unix, mais tu devrais avoir la même chose dans le c++...
    (au pire tu fait joujou avec extern C {})
    • [^] # Re: Shared memory

      Posté par  . Évalué à 1.

      Je ne peut pas utiliser tout ce qui est mémoires partagées, pipes et autres vu que l'architecture du programme est a peu près fixées, pour des raisons qui sont trop longues a expliquer ici.
      • [^] # Re: Shared memory

        Posté par  (site web personnel) . Évalué à 2.

        Hum, je comprend pas du tout, là tu nous parle c++ sous linux...

        hors linux gère les shm, pipe a peu près nativement dans la glibc et stdc++

        Hors si ton architecture est si limitée que ça, tu devrais pas toucher a du c++ qui est tout de même un peu plus évolués et a besoin d'un peu plus de choses sous-jasentes...
    • [^] # Re: Shared memory

      Posté par  (site web personnel) . Évalué à 1.

      S'il faut absolument passer par des fichiers qui doivent etre plus ou moins en RAM, pourquoi ne pas les mmap()er en MAP_SHARED plutot que de passer par un RAMFS ? Et apres, pour la signalisation, un coup de semaphores IPC devrait faire l'affaire (voire named socket ou pipes avec quelques select() bien sentis).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.