VxWorks里任何块设备都可以mount到dosfs或者hrfs文件系统上,VxWorks本身似乎没有什么API可以获得这些卷的大小,dosfs的话可以调用dosFsShow看volume信息,但是没有显示volume大小和free大小,有没有什么方法可以得到呢?

可以用这个API写个函数来实现。


STATUS statfs  
    (
        char          *name,                  
        struct statfs *pStat                  
    )

这个函数最终会调到下面这个系统调用上:


#define FIOFSTATFSGET   46  
ioctl (fd, FIOFSTATFSGET, (int)pStat);

这个函数大概可以这样写:


STATUS volumeShow 
( 
    char *devName 
) 
{ 
    ...... 
    struct statfs fs; 
    statfs ((char*)devName, &fs) 
    printf ("%s: Total File System Size: %dKB, Free space: %dKB.\n", devName, (int)(fs.f_bsize * fs.f_blocks /1024), (int)(fs.f_bsize * fs.f_bavail /1024)); 
    ...... 
} 

e.g:


-> volumeShow "/tffs0"
/tffs0: Total File System Size: 3824KB, Free space: 3821KB.