gpt4 book ai didi

c - 用于 samba 共享的 Linux fopen() 语法

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:39 28 4
gpt4 key购买 nike

我正在尝试对 fopen() 使用以下语法来访问 samba 共享。

FILE *of = fopen("smb://sambadevice/folder/filename.txt", "w");

但这不起作用(errno = 2)。

有人知道 samba 共享的正确语法吗?

PS - 如果我在 Dolphin 中输入“smb://sambadevice/folder”,它会打开文件夹。

最佳答案

fopen 不理解任何 语法。没有特殊的文件名形式可以传递给它以访问任何特殊的东西,除了本地文件系统(看起来是)中的普通文件名路径之外别无其他。

当您将路径名传递给 fopen 时,通常它不会以任何方式解析或检查路径名字符串;它只是将其传递给底层的 open 系统调用。然后 open 也只是对路径名进行非常基本的解析:它所做的只是将其拆分为 / 字符,以便它可以遍历路径(向下浏览任何目录和子目录)以找到请求的文件。这符合 Unix 哲学的一个重要原则,即“一切皆文件”。

但是,这绝对意味着没有办法使用调用 fopen 的 C 程序访问 Samba 安装的文件共享。如果您想访问 Samba 挂载的文件共享,您需要弄清楚如何将它们挂载 到本地文件系统。有很多方法可以做到这一点。我,我使用命令 mount.cifs。评论中的人还提到了 GVfsKioFuseSmb4K

一旦您安装了 Samba 文件共享(或者类似地,一旦您安装了任何资源)就好像它是本地文件系统中的文件或目录一样,您可以访问通过它的路径名就像——好吧,就好像它是本地文件系统中的文件或目录一样。 (当然,您可以通过任何工具或应用程序访问它,无论它是否是调用 fopen 的 C 程序。)

因此在 Unix 或 Linux 系统上,您通常不会在打开的路径名中看到任何明确的 smb:// 语法。通常,您打开的路径名将以 /mnt/cifs/home/myname/.gvfs 开头——也就是说,无论在已安装 Samba 共享的文件系统。

关于c - 用于 samba 共享的 Linux fopen() 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56931268/

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