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
。评论中的人还提到了GVfs
、KioFuse
和Smb4K
。
一旦您安装了 Samba 文件共享(或者类似地,一旦您安装了 any 资源)就好像它是本地文件或目录一样文件系统,您可以通过它的路径名进行访问,就好像它是本地文件系统中的文件或目录一样。 (当然,您可以通过任何工具或应用程序访问它,无论它是否是调用 fopen
的 C 程序。)
因此在 Unix 或 Linux 系统上,您通常不会在打开的路径名中看到任何明确的 smb://
语法。通常,您打开的路径名将以 /mnt
或 /cifs
或 /home/myname/.gvfs
开头——也就是说,Samba 共享已安装在文件系统中的任何位置。
我正在尝试对 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
。评论中的人还提到了GVfs
、KioFuse
和Smb4K
。
一旦您安装了 Samba 文件共享(或者类似地,一旦您安装了 any 资源)就好像它是本地文件或目录一样文件系统,您可以通过它的路径名进行访问,就好像它是本地文件系统中的文件或目录一样。 (当然,您可以通过任何工具或应用程序访问它,无论它是否是调用 fopen
的 C 程序。)
因此在 Unix 或 Linux 系统上,您通常不会在打开的路径名中看到任何明确的 smb://
语法。通常,您打开的路径名将以 /mnt
或 /cifs
或 /home/myname/.gvfs
开头——也就是说,Samba 共享已安装在文件系统中的任何位置。