首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在项目中使用libfuse,没有root访问权限(用于安装)?FTP装载& inotify/kqueue/FSEvents

在项目中使用libfuse,没有root访问权限(用于安装)?FTP装载& inotify/kqueue/FSEvents
EN

Stack Overflow用户
提问于 2010-12-01 11:52:20
回答 1查看 1.7K关注 0票数 1

我希望我的应用程序能够显示来自远程FTP (或SFTP等)位置的目录列表。当远程目录树中的文件/目录发生更改时,应用程序应使用相关更改更新其视图。

因为遍历整个树很慢而且很浪费,所以我想使用类似FSEvents的东西(Linux上的inotify/kqueue),但显然这些库是基于文件系统的,到FTP服务器的连接与挂载的文件系统不同。

为了使这些库正常工作,我需要在本地机器上实际挂载一个由FTP/SFTP支持的文件系统,然后将一个FSEventStream (或kqueue等)附加到这个本地挂载。我知道FUSE可以做到这一点,但是有没有什么方法可以不用用户先安装就可以使用FUSE呢?我的意思是,我可以将它与我的(Mac)应用程序捆绑在一起并创建挂载,而不必让用户经历实际运行安装程序包以将libfuse和内核模块复制到系统中的过程吗?它是否假设/dev/fuse存在,或者它是否存在于我的应用程序目录内的/dev/路径之外?

很好的Mac应用程序是通过简单的拖放来安装的,如果可能的话,我想保持这种方式。我不清楚是否可以直接使用libfuse (假设文件包含在应用程序中),而不是在系统路径中安装它。

或者,有没有人有任何其他的建议来监控FTP上的变化,而不是轮询?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-08 20:13:45

不幸的是,FTPSFTP不支持任何形式的客户端通知。

与HTTP非常相似,它们基于请求/响应方案,其中每个数据传输都由客户端发起。更糟糕的是,与HTTP相反,没有办法要求服务器通知客户端自特定日期以来的任何更改。

这意味着你不仅要使用轮询,而且所说的轮询决不是轻量级的。

就FUSE而言,大多数可用的FTP和SFTP模块仅在用户空间应用程序要求目录列表(例如,在文件浏览器窗口中点击刷新)时才更新其文件系统视图。它们不会自己执行轮询。您的用户空间应用程序必须通过轮询目录本身来启动刷新。

编辑:

为了澄清一些事情,FUSE的最新版本确实支持通知事件。它们只是将事件从模块传递到内核。模块仍然必须生成它们,并且在FTP/SFTP客户端模块的情况下,如果不轮询服务器,这是不可能的。

还要记住,尽管NFSv4.1具有必要的规定,但许多当前的NFS实现也不支持更改通知。许多SMB/CIFS服务器(特别是那些廉价的网络附加存储嵌入式系统)也仅限于没有支持。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4321035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档