gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:00 25 4
gpt4 key购买 nike

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

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

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

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

或者,对于通过 FTP 监视更改而无需轮询,是否有人有任何其他建议?

最佳答案

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

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

这意味着您不仅必须使用轮询,而且所述轮询绝非轻量级。

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

编辑:

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

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

关于c - 在项目中使用 libfuse,没有 root 访问权限(用于安装)? FTP 安装和 inotify/kqueue/FSEvents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4321035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com