2014-11-17 2 views
1

Я монтирую удаленный сетевой диск с использованием FTP. Когда я делаю statfs(), я получаю -1. Поэтому я хотел знатьМожет ли statfs() читать удаленный FTP-накопитель?

  1. Может ли statfs() читать удаленный сетевой диск, установленный с использованием FTP?
  2. Если нет, то как еще я могу получить информацию (размер, свободное пространство) об этом диске?

спасибо. Satya Sidhu

ответ

-2

Может ли statfs() читать удаленный сетевой диск, установленный с использованием FTP?

No.

Если нет, то как еще я могу получить информацию (размер, свободное пространство, доступное) об этом диске?

Существует команда FTP SITE, которая позволяет клиенту отправлять любую команду FTP-серверу. Обычно это используется для chmod, и обычно он очень ограничен сервером, какие команды вы можете использовать. Вы можете проверить, доступна ли команда df, но в основном это не так. Тогда вам не повезло, это меньше всего, пока вы можете использовать ftp только для связи с сервером.

1

Может ли statfs() читать удаленный сетевой диск, установленный с использованием FTP?

Да.

Необходимо использовать statfs() правильно. Пожалуйста, смотрите следующий пример:

#include <stat.h> 
#include <stdio.h> 

int myStatFs() { 
    struct statfs sfs; 
    int ret = statfs("host:", &sfs); 
    printf("[+] f_fbsize: %ld\n",sfs.f_bsize); 
    printf("[+] f_files: %ld\n",sfs.f_files); 
    printf("[+] f_bfree: %ld\n",sfs.f_bfree); 
    return ret; 
} 

И это то, что он выглядит, когда работает в приведенном выше примере:

-> myStatFs() 
[+] f_fbsize: 16 
[+] f_files: 25067444 
[+] f_bfree: 2952740 
value = -1 = 0xffffffff 
-> 

Вы должны убедиться, что вы смонтировать сетевой диск правильно. Это то, что возвращает мой hostShow():

-> hostShow 
hostname   inet address  aliases 
--------   ------------  ------- 
localhost  127.0.0.1 
xlnx_zynq7k  192.168.1.10 
host    192.168.1.11 
value = 0 = 0x0 
-> 

На машине в 192.168.1.11 работает FTP-сервер.

Это то, что statfs структура выглядит следующим образом:

struct statfs { 
    long f_type;     /* type of info, zero for now */ 
    long f_bsize;     /* fundamental file system block size */ 
    long f_blocks;     /* total blocks in file system */ 
    long f_bfree;     /* free block in fs */ 
    long f_bavail;     /* free blocks avail to non-superuser */ 
    long f_files;     /* total file nodes in file system */ 
    long f_ffree;     /* free file nodes in fs */ 
    fsid_t f_fsid;     /* file system id */ 
    long f_spare[7];    /* spare for later */ 
}; 

Вот документация VxWorks 5.5 statfs (и это в основном то же самое для VxWorks 6.9):

http://www.vxdev.com/docs/vx55man/vxworks/ref/dirLib.html#statfs

+0

Вы действительно уверены, что mount выполняется FTP (вы можете показать опцию mount) и что данные отражают правду о удаленной системе? Поскольку FTP не имеет общей команды для получения статуса удаленной файловой системы, для выполнения этой работы требуется некоторая магическая (нестандартная команда). –

+0

Существует некоторая нестандартная магия, которая делает эту работу, и она выполняется vxWorks при добавлении записи файловой системы хоста в таблицу хоста. Каждый раз, когда команда на файловой системе выполняется на хосте (в моем примере), vxWorks автоматически регистрируется через FTP с жестко запрограммированными учетными данными и выполняет операцию. – stu

+0

"и выполнить операцию ..." - знаете ли вы, какая операция (команда FTP) это? –

Смежные вопросы