2014-11-17 33 views
1

我正在使用FTP安裝遠程網絡驅動器。當我做一個statfs()時,我得到一個-1。所以我想知道statfs()可以讀取遠程FTP驅動器嗎?

  1. statfs()可以讀取使用FTP掛載的遠程網絡驅動器嗎?
  2. 如果不是那麼我怎麼才能得到關於這個驅動器的信息(大小,可用空間)?

謝謝。 Satya Sidhu

回答

-2

statfs()可以讀取使用FTP掛接的遠程網絡驅動器嗎?

如果沒有,那麼我是怎麼回事有關此驅動器的信息(大小,可用空間)?

有一個FTP SITE命令允許客戶端發送任何命令到FTP服務器。通常這用於chmod,通常服務器會嚴格限制您可以使用哪些命令。您可以嘗試檢查命令是否可用,但大多數情況不是。那麼你運氣不好,至少只要你使用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

您真的確定掛載是通過FTP完成的(可以顯示掛載選項),並且數據反映了遠程系統的真實情況?由於FTP沒有通用命令來獲取遠程文件系統的狀態,因此必須有一些魔術(非標準命令)才能使其工作。 –

+0

有一些非標準的魔術可以使這項工作成爲可能,並且在將主機文件系統條目添加到主機表時,vxWorks可以完成這項工作。每次在主機上執行文件系統命令時(在我的示例中),vxWorks將自動通過帶有硬編碼證書的FTP登錄,然後執行操作。 – stu

+0

「並執行操作...」 - 你知道這是哪個操作(FTP命令)嗎? –

相關問題