即: 如何檢查未格式化的驅動器大小... 不要考慮格式化的驅動器...只是未格式化的驅動器。如何以編程方式確定驅動器的空間/大小?在LInux和Windows上
4
A
回答
3
在Linux下,如果您想要整個驅動器的大小,請閱讀/sys/block/sda/size
。
要查找分區的大小,請閱讀/sys/block/sda/sda1/size
。
用您的設備/分區的名稱替換sda
,sda1
。
或者,如果您可以打開原始設備文件,則可以使用BLKGETSIZE
ioctl
。
2
for windows ..你可以使用DeviceIoControl()。
#include <windows.h>
#include <winioctl.h>
#include <stdio.h>
BOOL GetDriveGeometry(DISK_GEOMETRY *pdg)
{
HANDLE hDevice; // handle to the drive to be examined
BOOL bResult; // results flag
DWORD junk; // discard results
hDevice = CreateFile(TEXT("\\\\.\\PhysicalDrive0"), // drive
0, // no access to the drive
FILE_SHARE_READ | // share mode
FILE_SHARE_WRITE,
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL); // do not copy file attributes
if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive
{
return (FALSE);
}
bResult = DeviceIoControl(hDevice, // device to be queried
IOCTL_DISK_GET_DRIVE_GEOMETRY, // operation to perform
NULL, 0, // no input buffer
pdg, sizeof(*pdg), // output buffer
&junk, // # bytes returned
(LPOVERLAPPED) NULL); // synchronous I/O
CloseHandle(hDevice);
return (bResult);
}
int main(int argc, char *argv[])
{
DISK_GEOMETRY pdg; // disk drive geometry structure
BOOL bResult; // generic results flag
ULONGLONG DiskSize; // size of the drive, in bytes
bResult = GetDriveGeometry (&pdg);
if (bResult)
{
printf("Cylinders = %I64d\n", pdg.Cylinders);
printf("Tracks/cylinder = %ld\n", (ULONG) pdg.TracksPerCylinder);
printf("Sectors/track = %ld\n", (ULONG) pdg.SectorsPerTrack);
printf("Bytes/sector = %ld\n", (ULONG) pdg.BytesPerSector);
DiskSize = pdg.Cylinders.QuadPart * (ULONG)pdg.TracksPerCylinder *
(ULONG)pdg.SectorsPerTrack * (ULONG)pdg.BytesPerSector;
printf("Disk size = %I64d (Bytes) = %I64d (Gb)\n", DiskSize,
DiskSize/(1024 * 1024 * 1024));
}
else
{
printf ("GetDriveGeometry failed. Error %ld.\n", GetLastError());
}
return ((int)bResult);
}
0
編程在Linux中:
#include <fcntl.h>
#include <linux/fs.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
int fd;
unsigned long long numblocks=0;
fd = open(argv[1], O_RDONLY);
ioctl(fd, BLKGETSIZE64, &numblocks);
close(fd);
printf("Number of bytes: %llu, this makes %.3f GB\n",
numblocks,
(double)numblocks/(1024 * 1024 * 1024));
}
這基本上是從http://www.linuxproblem.org/art_20.html代碼,適於使用BLKGETSIZE64
,與各種警告固定。
相關問題
- 1. 如何以編程方式確定我的桌面的大小?
- 2. 如何確定SharePoint列表的大小以編程方式
- 3. 如何以編程方式確定連接池大小?
- 4. 以編程方式確定UIView的最大可用幀大小
- 5. 以編程方式確定iPad模式視圖的大小
- 6. 如何以編程方式獲取Linux內核頁面大小
- 7. Windows驅動程序編程或Linux驅動程序編程?
- 8. 如何在Windows下以編程方式確定驅動器是否爲DVD-RW/CD-RW?
- 9. 以編程方式在Windows中切換音頻驅動程序?
- 10. 如何以編程方式確定Windows是否正在關機?
- 11. 以編程方式確定SQL Server Compact sdf文件的大小
- 12. 以編程方式確定Groove工作區的大小?
- 13. 確定驅動器的大小(驅動器上沒有文件系統)Win7
- 14. 以編程方式確定UNC路徑中的可用空間
- 15. 以編程方式在Windows 7上禁用在線驅動程序搜索
- 16. 以編程方式鎖定C盤中的硬盤驅動器#
- 17. 如何以編程方式確定時間間隔狀態
- 18. 如何以編程方式調整按鈕動畫的大小
- 19. Objective-C,以編程方式確定文件大小
- 20. 如何以編程方式下載Google驅動器表單?
- 21. PowerShell:如何從SnapIn以編程方式裝入驅動器
- 22. 如何以編程方式在SD卡上創建特定大小的文件
- 23. 谷歌驅動器 - 如何從代碼清空垃圾(以編程方式)?
- 24. 任何方式來確定在Windows中的可移動驅動器的速度?
- 25. 以編程方式安裝Windows NDIS中級(IM)驅動程序
- 26. 以編程方式獲取啓動器的圖標大小
- 27. 在Linux中使用libudev以編程方式枚舉USB閃存驅動器
- 28. 如何以編程方式共享Android上的谷歌驅動器鏈接?
- 29. 以編程方式在Windows 10中的蟒蛇地圖驅動器
- 30. 如何以編程方式檢查Android上SMS消息大小
或掃描'/ proc/partitions' :) – ephemient 2009-12-26 17:58:50