c/c++语言开发共享在项目中使用libfuse,没有root访问权限(用于安装)? FTP安装和inotify / kqueue / FSEvents

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

因为遍历整个树是缓慢而浪费的,所以我想使用FSEvents(Linux上的inotify / kqueues)的内容,但显然这些库是基于文件系统的,并且与FTP服务器的连接不一样作为挂载的文件系统。

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

Nice Mac应用程序只需拖放就可以安装,如果可能的话我想保留这种方式。 我不清楚是否可以直接使用libfuse(如果文件包含在应用程序中),而不是在系统路径中安装它。

或者,是否有人有任何其他建议来监控FTP上的更改,而不进行轮询?

    不幸的是, FTP和SFTP不支持任何forms的客户端通知。

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

    这意味着不仅你必须使用轮询,而且说轮询绝不是轻量级的。

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

    编辑:

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

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

      以上就是c/c++开发分享在项目中使用libfuse,没有root访问权限(用于安装)? FTP安装和inotify / kqueue / FSEvents相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/c-cdevelopment/549624.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐