SMB 安装因 execl() 而失败

SMB mount fails with execl()

为了目前挂载 CIFS,我在源代码中使用了 system() 调用,这有效。如果我尝试在 shell 上手动 运行 命令,它也有效。

$ mount -t cifs //IP/dir /mnt -o user=name,pass=PASS,domain=mydomain,nounix
$ mount.cifs //IP/dir /mnt -o user=name,pass=PASS,domain=mydomain,nounix

但是如果我用 exec() 系列替换相同的命令,我会看到错误。

if(fork() == 0) 
{
  if (execl("/bin/mount", "/bin/mount", "-t", "cifs", "//IP/dir",  "/mnt", 
  "-o user=name,pass=PASS,domain=mydomain,nounix", (char*) NULL) < 0)
  ...
}
else
  ...

错误:安装:在 //IP/dir/mnt 上安装 cifs 失败:没有这样的文件或目录。挂载目录“/mnt”似乎无法识别或未被挂载进程看到。

尝试了以下方法但没有成功:

这里的原因是什么?如何查看 exec() 程序的命令行参数?

挂载版本:

mount.cifs version: 1.14-x

问候,- AK

假设您已经安装了 samba

sudo apt-get install samba

在文件 /etc/samba/smb.conf 的全局部分你应该有这个:-

workgroup = WORKGROUP
netbios name = PCNAME
name resolve order = bcast host

相应地更改 WORKGROUP 和 PCNAME。如图所示设置名称解析顺序,以便使用 Nautilus 浏览 windows 个共享。

使用 strace() 查找传递给 execl() 的参数。通过使用系统调用 mount()umount().

解决了我的问题