Dateisystemtyp rausfinden



  • Hallo,

    Wie kann man unter Linux (in c Code), rausfinden auf welchem Dateisystemrtyp eine Datei liegt.
    Konkret geht es darum zu unterscheiden ob es ein normales oder Netzwerkdateisystem (NFS, SMB) ist.

    Ich hab mich schonmal umgeschaut und getmntent(3) gefunden. Dort bekomm ich aber nur die einzelnen gemounteten Dateisysteme raus. Irgendwie muss ich das dann noch mit stat(2) verbinden um auf die Datei zu kommen.

    Hat da jemand vll. eine Idee?



  • Ich weiß offen gestanden nicht, ob das irgendwie hübscher geht, aber Du kannst natürlich /etc/mtab parsen.



  • nman schrieb:

    Ich weiß offen gestanden nicht, ob das irgendwie hübscher geht, aber Du kannst natürlich /etc/mtab parsen.

    Dazu ist die funktion getmntent(3) da, die gibt mir ein strukt dass folgendermaßen aussieht:

    struct mntent {
                          char    *mnt_fsname;    /* name of mounted file system */
                          char    *mnt_dir;       /* file system path prefix */
                          char    *mnt_type;      /* mount type (see mntent.h) */
                          char    *mnt_opts;      /* mount options (see mntent.h) */
                          int     mnt_freq;       /* dump frequency in days */
                          int     mnt_passno;     /* pass number on parallel fsck */
                  };
    

    Da bekomm ich dann unter mnt_type den typ raus. So weit so gut, nur leider gibts keinen bezug zur Datei die ich hab.
    Ich kann natürlich über den Pfad der Datei und den Mountpoints irgendwas zusammenflicken, find ich aber nicht sehr schön. Deshalb dachte ich da gibts was eleganteres was ich nicht kenn.



  • Oh, Sorry, hatte Dich wohl falsch verstanden. Du willst also nur wissen, auf welchem Mountpoint eine Datei liegt?



  • nman schrieb:

    Oh, Sorry, hatte Dich wohl falsch verstanden. Du willst also nur wissen, auf welchem Mountpoint eine Datei liegt?

    Ja genau, wenn ich das wüsste könnte ich dann den Dateisystemtyp bestimmen.



  • Ich habe jetzt leider nicht die Zeit, Dir das nachzuschlagen, aber stat(1) gibt mit -f als Parameter den Dateisystemtyp aus, schau am besten mal, ob es das auch in der stat(2)-Familie gibt, bzw. wie stat(1) das macht.



  • nman schrieb:

    Ich habe jetzt leider nicht die Zeit, Dir das nachzuschlagen, aber stat(1) gibt mit -f als Parameter den Dateisystemtyp aus, schau am besten mal, ob es das auch in der stat(2)-Familie gibt, bzw. wie stat(1) das macht.

    Danke, hat sich erledigt es gibt noch statfs(2) das macht genau das. Habs blos nicht gefunden weils unter stat(2) nicht referenziert war. Ein blick in das include verzeichnis hilft oft weiter 🙂


Anmelden zum Antworten