LINUX.ORG.RU

mount(2) + EINVAL


0

0

Доброго время суток !

У меня следующая проблемка:

пишу маленькую прогу в с++. Эта прога должна делать логи на удалённой системе. Моя система SuSE 9.3 удалёнка WinXP.

В терминале при вызове: "mount -t smbfs -o username=ImUser,password=ImUser,uid=User,gid=users //IP/Sharepoint /home/User/mountpoint" всё проходит на ура.

А если из программы - то получаю: EINVAL

Код выглядит следующим образом:

...

int nRes = 0; errno = 0;

nRes = mount( "//IP/sharename", "/home/user/mountpoint", "smbfs", 0, "username=ImUser,password=ImUser,uid=User,gid=users");

if( ( nRes != -1) && ( errno != EBUSY) // EBUSY == alredy mounted

...

Да чтобы избежать проблем с распределением прав, запускаю эту программку для начала из под root.

Может кто подскажет Хде тут собака зарыта ? Заранее благодарен !

сделай strace того маунта что из командной строки -- посмотри какой mount(2) с какими аргументами он дергает.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Привет !!!

вот что я вижу:

mount("//IP/sharename", "./MountPoint", "smbfs", MS_SYNCHRONOUS|MS_POSIXACL|MS_ACTIVE|MS_NOUSER|0xec0000, 0x8165880) = -1 EINVAL (Invalid argument)

А вот так выгядит мой код:

#include <sys/mount.h> ...

#ifndef MS_SYNC

#define MS_SYNC 16

#endif

int nRes = 0;

errno = 0;

nRes = mount( "//IP/sharename", "./MountPoint", "smbfs", MS_MGC_VAL|MS_SYNC, "username=ImUser,password=ImUser,uid=User,gid=users");

if( ( nRes != -1 ) && ( errno != EBUSY ) ) { .. } else { // error .. }

Kaif_and_Kaif
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.