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”似乎无法识别或未被挂载进程看到。
尝试了以下方法但没有成功:
- 按照论坛中的建议尝试使用 sec=ntlmv2 和其他选项
- 和mount.cifs
- 组合参数“//IP/dir”和“/mnt”为“//ipaddr/dir /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()
.
解决了我的问题
为了目前挂载 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”似乎无法识别或未被挂载进程看到。
尝试了以下方法但没有成功:
- 按照论坛中的建议尝试使用 sec=ntlmv2 和其他选项
- 和mount.cifs
- 组合参数“//IP/dir”和“/mnt”为“//ipaddr/dir /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()
.