fopen
не понимает любой синтаксис. Не существует специальных форм имен файлов, которые вы можете передать, чтобы получить доступ к чему-то особенному, кроме как к обычному пути к имени файла в (как представляется,) локальной файловой системе.
Когда вы передаете путь к fopen
, обычно он никак не анализирует и не проверяет строку пути; он просто передает его базовому системному вызову open
. И тогда open
не делает ничего больше, чем очень простой синтаксический анализ имени пути: все, что он делает, это разбивает его на /
символов, чтобы он мог пройти путь (работать через любые каталоги и подкаталоги) для найти запрошенный файл. Это соответствует важному принципу философии Unix, а именно «все - файл».
Это, безусловно, не означает, однако, что нет никакого способа получить доступ к смонтированным на Samba файловым ресурсам с помощью программы на C, которая вызывает fopen
. Если вы хотите получить доступ к смонтированным на Samba файловым ресурсам, вам необходимо выяснить, как смонтировать их в локальной файловой системе. Есть много способов сделать это. Я использую команду mount.cifs
. Люди в комментариях также упоминали GVfs
, KioFuse
и Smb4K
.
Как только у вас смонтирован общий файловый ресурс Samba (или, аналогично, после того, как вы смонтировали любой ресурс), как если бы это был файл или каталог в локальной файловой системе, вы можете получить доступ через его путь, как если бы - ну, как если бы это был файл или каталог в локальной файловой системе. (И, конечно, вы можете получить к нему доступ через любой инструмент или приложение, независимо от того, является ли это программой на C, вызывающей fopen
.)
Таким образом, в системах Unix или Linux вы обычно не увидите явного синтаксиса smb://
в открываемом вами пути. Обычно открываемый путь начинается с /mnt
или /cifs
или /home/myname/.gvfs
- то есть, где бы в файловой системе не был смонтирован общий ресурс Samba.