Mountpoint C

Sekcia: Programovanie 10.08.2011 | 12:53
Avatar Pali   Používateľ
Ahojte, ako dokazem ziskat mountpoint a zariadenie v /dev nejakeho suboru v C-cku?

Teda napr. mam:
/dev/sda1 --> /
/dev/sda2 --> /home
/dev/sda3 --> /boot
/dev/sda4 --> /home/daco/daco

A teda zo suboru /bin/ls chcem zistit na akom mountpointe je a na akom zariadeni (konkretne /dev/sda1 a /)
To iste pre nejaky iny subor /home/daco/daco/daco mi ma vratit /dev/sda4

Ako sa da nieco take napisat (co najefektivenejsie) v C-cku?
    • Re: Mountpoint C 10.08.2011 | 16:14
      miso   Návštevník
      man 2 stat:

      int stat(const char *path, struct stat *buf);

      dev_t st_dev; /* ID of device containing file */
      dev_t st_rdev; /* device ID (if special file) */

      Co je pripojene zisitis napr. z /proc/mounts, treba najst devfile ktoreho st_rdev == st_dev hladaneho suboru.
      • Re: Mountpoint C 10.08.2011 | 17:38
        Avatar Pali   Používateľ
        A ako najst devfile ktory ma rovnake dev_t (teda minor a major number) ako dany subor?
      • Re: Mountpoint C 11.08.2011 | 23:15
        Avatar Pali   Používateľ
        s pouzitim stat ma ale napadla tato vec:

        stat subor/adresar, ulozit si st_dev. Ist v adresarovej strukture vyssie. Stat na aktualny adresar, porovnat st_dev. Toto robit az dovtedy kym nebudem v / alebo kym sa st_dev nezmeni.

        je to rozumny napad, ci pomaly?
    • Re: Mountpoint C 10.08.2011 | 18:35
      Avatar borg Fedora  Administrátor
      pozri setmntent a getmntent.
      • Re: Mountpoint C 11.08.2011 | 23:13
        Avatar Pali   Používateľ
        pomoze mi to? ak som dobre pochopil tak setmntent/getmntent je iba parser suboru ktory ma format ako /etc/mtab. Teda viem to pouzit ak poznam mountpoint ci pouzite zariadenie z /dev. To vsak ale potrebujem najprv zistit.
    • Re: Mountpoint C 20.08.2011 | 00:11
      Avatar Pali   Používateľ
      Tak uspecne som to spravil a vyuzil som aj getmntent. Myslienka je taka, ze zo vstupneho suboru zistim id zariadenia (cez stat) a pojdem o uroven vyssie v adresarovej strukture pokial az pokial id zariadenia adresara nebude ine. Potom adresar v ktorom ostanem najdem pomocou getmntent v /etc/mtab a dopracujem sa tak k zariadeniu v /dev/.

      Ukazkovy kod je tu: http://pastebin.com/sktpvctP