Linux samba 共享的 fopen() 语法

Linux fopen() syntax for samba share

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

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

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

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

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

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

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

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

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

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