savoir si un volume est utilisé

elfelf Membre
18:51 modifié dans API AppKit #1
Hello,

Est-ce que vous connaisez un moyen de découvrire si un volume est utilisé? (si un fichier ou application dedant est ouvert, en gros, tout ce qui empèche de l'ejecter...)

Merci,
Kenny

Réponses

  • elfelf Membre
    18:51 modifié #2
    Auto-réponse, j'ai trouvé... déjà !

    lsof
  • BruBru Membre
    18:51 modifié #3
    dans 1192993303:

    Auto-réponse, j'ai trouvé... déjà !

    lsof


    Ouais, mais ce n'est pas la meilleure méthode.
    lsof ne permet pas de savoir si il y a un working-dir ouvert sur le volume, or un working-dir ouvert empêche aussi le démontage du volume.

    La meilleure méthode (c'est en carbon, mais ça ne devrait pas te faire peur), c'est utiliser la fonction FSGetVolumeInfo : cela te permet de récupérer certains flags, dont celui de "volume utilisé".

    .
  • elfelf Membre
    18:51 modifié #4
    ah! merci! je vais aller voire la doc pour cette méthode... :) <3 <br />

    PS: bru a son propre smiley! :P
  • BruBru Membre
    18:51 modifié #5
    Un classique du genre :
    <br />{<br />&nbsp;  NSString *vol;<br />&nbsp;  FSRef ref;<br />&nbsp;  FSCatalogInfo cat;<br />&nbsp;  FSVolumeRefNum vrefnum;<br />&nbsp;  FSVolumeInfo volinf;<br />&nbsp;  short flags;<br /><br />&nbsp;  vol=@&quot;/Volumes/NO NAME&quot;;<br /><br />&nbsp;  // transformation d&#39;un chemin posix en fsref<br />&nbsp;  FSPathMakeRef((const UInt8 *)[vol fileSystemRepresentation], &amp;ref, NULL);<br /><br />&nbsp;  // récupération du vrefnum du volume pointé par le fsref<br />&nbsp;  FSGetCatalogInfo(&amp;ref, kFSCatInfoVolume, &amp;cat, NULL, NULL, NULL);<br />&nbsp;  vrefnum=cat.volume;<br /><br />&nbsp;  // récupération des flags du volume<br />&nbsp;  FSGetVolumeInfo(vrefnum, 0, NULL, kFSVolInfoFlags, &amp;volinf, NULL, NULL);<br />&nbsp;  flags=volinf.flags;<br /><br />&nbsp;  // test si le volume est utilisé<br />&nbsp;  if (flags &amp; kFSVolFlagFilesOpenMask) NSLog(@&quot;volume utilisé...&quot;);<br />&nbsp;  else&nbsp; NSLog(@&quot;prêt à  être éjecté&quot;);<br />}<br />
    


    Note : code minimaliste. Normalement, chaque fonction Carbon retourne un code erreur qu'il faudrait tester...

    .
  • elfelf Membre
    18:51 modifié #6
    Bru, merci pour l'exemple... je regarderais tout ça quand je bosserai de nouveau sur Exces, probablement ce weekend.
Connectez-vous ou Inscrivez-vous pour répondre.