免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2957 | 回复: 8
打印 上一主题 下一主题

有关确定本地加载远程共享文件夹的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-26 09:58 |只看该作者 |倒序浏览
10可用积分
近来有一个研究课题,需要解决一个较为具体的问题,也许很简单,烦请诸位大侠指点小弟一二:

这个问题是:

如何确定一台Linux主机下哪个目录是通过加载远程samba或者NFS共享目录对应在本机的目录?

因为运行smbmount或者mount nfs *完成加载远程目录之后,通常情况下会安装到/mnt下面的某个目录,也有可能安装到/home下面某个目录,但是/mnt或者/home下面可能存在很多目录,我该如何确定这是一个samba或是nfs目录呢?

目前我想到的一个比较笨的办法是通过history查看smbmount或者mount的记录,但是这受限于history条数和规则的限制,我的需求是想通过程序的方式将这个工作自动化完成,但对于samba以及nfs的API没找到什么可供直接使用的资料。

以samba为例,官方的Developer Guide好像更侧重于samba作为开源系统自身的开发,我也尝试着读Linux Kernel的源码../fs/smbfs/..那部分,也想不好该如何入手,各位大侠可以给我提供一些可用的方法或者建议吗?samba有没有什么library可以使用呢?(libsmbclient算是吗?我看系统自带的manual没有什么我可以参考的价值)......

最佳答案

查看完整内容

看看 mount 的输出或者 /etc/mtab 的内容应该有帮助。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2009-02-26 09:58 |只看该作者

回复 #1 leafraincao 的帖子

看看 mount 的输出或者 /etc/mtab 的内容应该有帮助。

论坛徽章:
0
3 [报告]
发表于 2009-02-26 10:09 |只看该作者
这个我不熟,不过如果是我的话我会尝试以下方法:
1,那么samba肯定会在本机有监控进程或者说是后台进程来映射目录了,找到进程ID去读那个进程的加载参数或者配置文件。。。
2,读文件属性(可以配合history记录)。。。。

论坛徽章:
0
4 [报告]
发表于 2009-02-26 23:30 |只看该作者
楼上的两位大侠都很NB,谢谢啦!
下面的,就是找mtab的有关数据格式了,希望还是能通过API来完成相关工作,呵呵,有什么好的建议吗?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2009-02-27 10:14 |只看该作者
原帖由 leafraincao 于 2009-2-26 23:30 发表
楼上的两位大侠都很NB,谢谢啦!
下面的,就是找mtab的有关数据格式了,希望还是能通过API来完成相关工作,呵呵,有什么好的建议吗?

解析 mount 的输出或者 /et/mtab 很困难么?要什么 API?

论坛徽章:
0
6 [报告]
发表于 2009-02-27 10:22 |只看该作者
原帖由 MMMIX 于 2009-2-26 09:58 发表
看看 mount 的输出或者 /etc/mtab 的内容应该有帮助。

恩,这个不错。。。

论坛徽章:
0
7 [报告]
发表于 2009-03-05 16:06 |只看该作者
客户端的已经可以实现啦

可以参考内核源代码中struct mntent的内容,个人写了一个测试小程序,如下:

----------------------------------------------------------------------
......
#include <stdio.h>
#include <mntent.h>
......

main()
  {
   FILE *dest_fd;
   struct mntent *mount_entry;
   
   dest_fd = setmntent(MOUNTED, "r");
  
   while((mount_entry = getmntent(dest_fd))!=NULL)
        {
          if (strcmp(mount_entry->mnt_type, "smbfs") ==0)
               {
                 printf("The samba directory is mounted on -----> %s\n",mount_entry->mnt_dir);
               }
         }
     }

---------------------------------------------------
编译之后运行可以得到当前本地加载的samba目录的位置……

论坛徽章:
0
8 [报告]
发表于 2009-03-05 16:13 |只看该作者
新的问题是:

如果这个主机是samba服务器或者nfs服务器,我该如何确定本地所用来开放共享的文件夹的路径。

比如smbd,可以知道的是/etc/samba/smb.conf文件靠近尾部的位置,可以直观地看到相关的路径信息,我是希望可以找到类似smbclient的那种方法,能够有规范的数据结构可以访问并读取相关信息,而不需要采用那种在一个文本文件中进行字符串匹配操作的方式。

诸位高人有没有什么好的建议呢?

论坛徽章:
0
9 [报告]
发表于 2009-03-09 16:12 |只看该作者
nfs部分,可以发现/etc/exports里面有对应内容……

为解决我的问题,自己顶起来……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP