embedded-linux – 在Linux中使用NFS挂载系统调用
我正在尝试将源目录从nfs服务器挂载到具有
linux的嵌入式主板中的目标目录.以下命令在板中的shell提示符中按预期完美地工作.
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)); }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- linux – 从fedora机器重启时从/ var / run中删除的东西是什
- linux – 从存储库获取svn日志,而不是工作副本
- windows – 将Winsock移植到Linux套接字
- linux – 我怎么知道是否需要运行systemctl守护进程重装
- linux – 禁用启动服务
- linux – “sudo -i”和“sudo bash -l”之间的区别是什么?
- Linux SCTP实现状态
- osx – 将KVM(用于Linux)移植到Mac OS X
- linux – 路由添加/删除后的计时问题(路由未使用)
- 虚拟化 – Linux KVM-QEMU主机Windows VM guest,如何访问数