Файловая подсистема / \ Корневая Некорневая UNIX Win,Mac
Корневая: Есть корень файловой системы к нему в поддиректории можно монтировать тома.
Некорневая: Единого корня файловой системы нет, на верхнем уровне находятся тома которые определяются идентификаторами. Как правило идентификатор является либо буквой либо строкой. DOS, Win: C: Mac Machintosh HD: Netware SYS:
Смешанная: Единого корня нет, но можно монтировать другие тома в директории.
API для корневых подсистем
int chroot(const char* path) // Non standard |
int mount(const char * sourcedevice, // Non standard const char * targetdir, const char * fstype, unsigned long flags, const void * data); int umount(const char* target); // Non standard |
API для некорневых подсистем
DWORD GetLogicalDrives(void); bit 0 - means 'A:' bit 1 - means 'B:' etc if bit = 1 then volume is present UINT GetDriveType(LPCTSTR lpRootPathName); DRIVE_UNKNOWN DRIVE_NO_ROOT_DIR DRIVE_REMOVABLE DRIVE_FIXED DRIVE_REMOTE DRIVE_CDROM DRIVE_RAMDISK DWORD GetLogicalDriveStrings(DWORD nBufferLength,LPTSTR lpBuffer); |
HANDLE FindFirstVolume( LPTSTR lpszVolumeName, DWORD cchBufferLength ); BOOL FindNextVolume( HANDLE hFindVolume, LPTSTR lpszVolumeName, DWORD cchBufferLength ); BOOL FindVolumeClose( HANDLE hFindVolume ); |
HANDLE FindFirstVolumeMountPoint( LPTSTR lpszRootPathName, LPTSTR lpszVolumeMountPoint, DWORD cchBufferLength ); BOOL FindNextVolumeMountPoint( HANDLE hFindVolumeMountPoint, LPTSTR lpszVolumeMountPoint, DWORD cchBufferLength ); BOOL FindVolumeMountPointClose( HANDLE hFindVolumeMountPoint ); |
BOOL SetVolumeMountPoint( LPCTSTR lpszVolumeMountPoint, LPCTSTR lpszVolumeName ); BOOL DeleteVolumeMountPoint( LPCTSTR lpszVolumeMountPoint ); BOOL GetVolumeNameForVolumeMountPoint( LPCTSTR lpszVolumeMountPoint, LPTSTR lpszVolumeName, DWORD cchBufferLength ); |
Cоответсвенно для некорневых систем присутсвует большее количество API, потому что надо еще управлять томами.
В реальности есть еще и смешанные варианты: когда тома могут как иметь буквы, так и монтироваться в поддиректории (причем одно не мешает другому). Например Windows 2000 NTFS: C: \XX --> Volume mount point -> \Device\Harddisk2\Partition7