目前我要在源代码中使用system()调用来安装CIFS,这是有效的。如果我尝试在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
...
错误:mount:在// IP / dir / mnt上挂载cifs失败:没有这样的文件或目录。它看起来像挂载目录&#34; / mnt&#34;安装过程无法识别或看不到。
尝试下面的事情,但没有运气:
这里的原因是什么?如何查看exec()&#39; ed程序的命令行参数?
mount版本:
mount.cifs version: 1.14-x
问候, - AK
答案 0 :(得分:1)
假设您已安装samba
sudo apt-get install samba
在文件/etc/samba/smb.conf的全局部分,你应该这样: -
workgroup = WORKGROUP
netbios name = PCNAME
name resolve order = bcast host
相应地更改WORKGROUP和PCNAME。设置名称解析顺序,如图所示,以便使用Nautilus浏览Windows共享。
答案 1 :(得分:1)
使用strace()
查找传递给execl()
的参数。使用系统调用mount()
和umount()
解决了我的问题。