2013-10-17 50 views
1

我正在複製安裝的系統可以是USB,FireWire,AFP或遠程服務器的本地和裝入文件系統之間的文件。我需要確定安裝的卷正在使用的計算機的連接類型。我可以使用系統調用statfs來確定掛載的文件系統,但我無法弄清楚如何識別連接類型(FireWire,Wifi,eth,USB ...)。我的代碼來識別文件系統是:以編程方式檢測安裝的卷的連接類型

-(void) getVolumeInfo:(NSURL *) myurl 
{ 
    struct statfs buf; 
    statfs([myurl.path UTF8String], &buf); 
    NSLog(@"Filesystem type: %s mounted filesystem: %s mounted as: %s",buf.f_fstypename,buf.f_mntfromname,buf.f_mntonname); 
} 

這給我的筆記本電腦硬盤和我的NAS服務器的以下輸出。

Filesystem type: hfs mounted filesystem: /dev/disk0s2 mounted as:/
Filesystem type: afpfs mounted filesystem: //Trond%[email protected]_afpovertcp._tcp.local/home mounted as: /Volumes/home 

我的問題是:1)有沒有人知道我可以通過識別代碼的例如NAS服務器連接(WIFI或網線)2)反正我有可以檢測連接速度?

謝謝!

+0

你能告訴我如何掛載文件系統嗎?謝謝 – NTNT

回答

5

要確定連接類型(當前活動的接口),您可以使用System Configuration FrameworkSCNetworkConfiguration中的一些功能可能提供有關當前活動接口的信息......似乎在SCNetworkConnection中定義了一些吞吐量/統計功能,但它們似乎適用於PPP連接類型。

您還可以在NSWorkspace中找到一些有用的方法,但似乎您可能已經涵蓋了文件系統信息。

#import <Foundation/Foundation.h> 
#import <AppKit/NSWorkspace.h> 

int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 
    BOOL isRemovable, isWritable, isUnmountable; 
    NSString *description, *type; 

    [[NSWorkspace sharedWorkspace] getFileSystemInfoForPath:@"/Volumes/Users" 
                 isRemovable:&isRemovable 
                 isWritable:&isWritable 
                 isUnmountable:&isUnmountable 
                 description:&description 
                   type:&type]; 

    NSLog(@"Filesystem description:%@ type:%@ removable:%d writable:%d unmountable:%d", description, type, isRemovable, isWritable, isUnmountable); 

    } 
    return 0; 
} 
+0

請注意,在較新的系統上,如果沒有首先提示用戶,沙箱將不允許您訪問的路徑可能會失敗(並且在inout參數上返回NO/nil)。如果可以,請使用圖書館等已知路徑。 – fzwo