mount -t nfs -o nolock 10.126.62.45:/vol/home/avinoba/Sky /mnt
在上面的命令的程序中使用的等效系统调用是什么?
我尝试了以下调用但挂载失败并显示“无效参数”
if(mount("10.126.62.45:/vol/home/avinoba/Sky","/mnt","nfs",MS_MGC_VAL,"nolock") == -1){ printf("ERROR: mount Failed: %s \n",strerror(errno));}
请建议解决方案是什么.
谢谢
解决方法 我很惊讶这里有关于NFS挂载的任何手册页都没有涵盖这一点.潜入内核代码,在函数nfs_valIDate_text_mount_data中,函数nfs_parse_mount_options负责解析作为mount系统调用中第五个参数传递的多个逗号分隔选项.struct sockaddr *sap = (struct sockaddr *)&args->nfs_server.address;if (nfs_parse_mount_options((char *)options,args) == 0) return -EINVAL;if (!nfs_verify_server_address(sap)) goto out_no_address;
在上面的代码块中,最后一个if语句检查nfs服务器地址和套接字系列是否定义为有效值.如果它们未在nfs_parse_mount_options中更新,则mount将最终返回无效参数.
如果遍历nfs_parse_mount_options的实现,则可以看出,仅对于Opt_addr的情况,通过解析options参数来更新nfs服务器地址和套接字系列.
case Opt_addr: string = match_strdup(args); if (string == NulL) goto out_nomem; mnt->nfs_server.addrlen = rpc_pton(mnt->net,string,strlen(string),(struct sockaddr *) &mnt->nfs_server.address,sizeof(mnt->nfs_server.address)); kfree(string); if (mnt->nfs_server.addrlen == 0) goto out_invalID_address; break;
Opt_addr的情况对应于“addr = nfs server ip”选项.因此,要使系统调用工作,必须定义此选项.据我所知,所有描述nfs挂载的手册页都完全没有.
所以现在考虑问题陈述,请尝试更改为以下代码
if(mount(":/vol/home/avinoba/Sky","nolock,addr=10.126.62.45") == -1){ printf("ERROR: mount Failed: %s \n",strerror(errno));}
总结Also note that when the addr option is put in the argument,the ip address in front of the nfs server path becomes optional. However the ‘:’ is must,as this acts as the delimiter to parse the nfs server path.
以上是内存溢出为你收集整理的embedded-linux – 在Linux中使用NFS挂载系统调用全部内容,希望文章能够帮你解决embedded-linux – 在Linux中使用NFS挂载系统调用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)