Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Снова о mount c++  (Прочитано 1630 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kassyopeya

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Снова о mount c++
« : 19 Апрель 2012, 14:51:49 »
int ret = mount("/dev/sdb1", "/media/flash", "vfat", 0, NULL);

флешку монтирует, но запись в файле etc/mtab не появляется. Почему?

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: Снова о mount c++
« Ответ #1 : 19 Апрель 2012, 15:03:10 »
int ret = mount("/dev/sdb1", "/media/flash", "vfat", 0, NULL);

флешку монтирует, но запись в файле etc/mtab не появляется. Почему?

1. система какая (uname) + "снова"(с) ;) - всё это в VirtualBox ?

2. так etc/mtab или /etc/mtab всё таки? ... как говорят в Одессе ... ;)

3. покажите
$ mount
откуда знаете, что "монтирует"(с)?

4. ... в конечном итоге: "вам ехать, или шашечки?".

Оффлайн kassyopeya

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: Снова о mount c++
« Ответ #2 : 19 Апрель 2012, 15:09:02 »
1. Ubuntu 11.04 на VMware
2. /etc/mtab, конечно же
3. Ну после выполнения mount в командной строке в mtab запись появляется, после umount удаляется
После запуска моего кода mtab не обновляется, но путь "/media/flash" работает, и через него можно записывать/удалять с флешки файлы. Т.е. будто бы я запускаю из терминала mount -n.

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: Снова о mount c++
« Ответ #3 : 19 Апрель 2012, 15:17:05 »
1. Ubuntu 11.04 на VMware
Про VMware ничего не могу сказать - там может быть всё. ;)

Оффлайн kassyopeya

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: Снова о mount c++
« Ответ #4 : 19 Апрель 2012, 15:48:59 »
Про VMware ничего не могу сказать - там может быть всё. ;)

в обычной убунте та же проблема, mtab не меняется

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: Снова о mount c++
« Ответ #5 : 19 Апрель 2012, 17:47:10 »
Про VMware ничего не могу сказать - там может быть всё. ;)

в обычной убунте та же проблема, mtab не меняется
Покажите
$ cat /etc/mtab | grep sd
1. до монтирование
2. после монтирования командой mount
3. после монтирования из вашего кода.

Я что не пойму...
У вас что, автомонтирование не работает?
как вы можете монтировать устройство из кода, если оно уже примонтировано при подключении?
Или вы ему делаете принудительно umount?


Пользователь решил продолжить мысль 19 Апрель 2012, 18:18:16:
в обычной убунте та же проблема, mtab не меняется

Странно мне всё это слышать... Решил проверить, но в Fedora 15: а). там и ядро посвежее и б). там с точки зрения Linux всё корректнее и строже. 
Опримитивлено до нельзя - или монтирует и показывает дерево монтирования, или сообщает об ошибке:
int main( int argc, char *argv[] ) {
   char usb[ 40 ] = "/dev/sdd1",
        mnt[ 40 ] = "/mnt/usb1";
   int ret = mount( usb, mnt, "vfat", 0, NULL );
   if( ret != 0 )
      printf( "ошибка монтирования: %m\n" );
   else {
      char cmd[ 40 ];
      sprintf( cmd, "tree %s", mnt );
      ret = system( cmd );
   }
   return 0;
}
Для страховки размонтировал автомонтированный USB:
[olej@notebook mount]$ sudo umount /dev/sdd1Выполнение:
[olej@notebook mount]$ ./mnt
ошибка монтирования: Operation not permitted
[olej@notebook mount]$ sudo ./mnt
cmd: tree /mnt/usb1
/mnt/usb1
├── kernel-devel-2.6.42.12-1.fc15.i686.rpm
├── kernel-doc-2.6.42.12-1.fc15.noarch.rpm
├── kernel-headers-2.6.42.12-1.fc15.i686.rpm
├── kernel-PAE-devel-2.6.42.12-1.fc15.i686.rpm
├── pasport_OI_1.bmp
├── pasport_OI_2.bmp
├── pasport_OV_1.bmp
└── pasport_OV_2.bmp

0 directories, 8 files
- и ошибки на месте, и нормальное выполнение.
А теперь самое интересное:
[olej@notebook mount]$ cat /etc/mtab | grep '/sd'
/dev/sda1 /boot ext3 rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered 0 0
/dev/sdd1 /mnt/usb1 vfat rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0
[olej@notebook mount]$ mount | grep sd
/dev/sda1 on /boot type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered)
/dev/sdd1 on /mnt/usb1 type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=ascii,shortname=mixed,errors=remount-ro)
Всё на своём месте - хоть так, хоть так!
« Последнее редактирование: 19 Апрель 2012, 18:18:16 от Olej »

Оффлайн kassyopeya

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: Снова о mount c++
« Ответ #6 : 21 Апрель 2012, 14:12:13 »
Я что не пойму...
У вас что, автомонтирование не работает?
как вы можете монтировать устройство из кода, если оно уже примонтировано при подключении?
Или вы ему делаете принудительно umount?

Работает, но этот код лишь маленький кусочек одной большой задачи. Но вызывает какие-то проблемы. Хотя, возможно, только в убунте.
У меня то флешка монтируется автоматом. Но при запуске программы идет проверка, если флешка примонтирована, то возвращается путь, если нет - монтируется. В первом случае - никаких проблем, во втором беда-беда в убунте. Естественно, для проверки, я ей сначала делаю umount. Там, где программа будет запускаться потом, такая ситуация возможна.


1. До монтирования:

/dev/sda1 / ext4 rw,errors=remount-ro,commit=0 0 0

2. После монтирования с помощью Mount в терминале:

/dev/sda1 / ext4 rw,errors=remount-ro,commit=0 0 0
/dev/sdd1 /media/Transcend vfat rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks 0 0

3. После выполнения кода:
на флешку можно зайти без проблем через /media/usb, но mtab:

/dev/sda1 / ext4 rw,errors=remount-ro,commit=0 0 0

при этом в /proc/mounts:

/dev/sdd1 /media/usb vfat rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
Re: Снова о mount c++
« Ответ #7 : 21 Апрель 2012, 14:19:11 »
3. После выполнения кода:
на флешку можно зайти без проблем через /media/usb, но mtab:

Для начала я бы посоветовал вам поэкспериментировать:
- не монтировать в /media - это фиктивный каталог, в tmpfs, специально появившийся для автомонтирования ... оно вам надо?
- монтируйте в нормальный /mnt, который отродясь для того и был предназначен.

 

Страница сгенерирована за 0.088 секунд. Запросов: 25.