使用以下代码,我能够成功地在我的机器上打开原始磁盘,但是当我获取磁盘长度时,每次都会得到0...
// Where "Path" is /dev/rdisk1 -- is rdisk1 versus disk1 the proper way to open a raw disk?
Device = open(Path, O_RDWR);
if (Device == -1)
{
throw xException("Error opening device");
}
使用这两种方法获取大小都会返回0:
struct stat st;
if (stat(Path, &st) == 0)
_Length = st.st_size;
这是一个简单的HTML段落,其中只包含斜杠字符“/”。
_Length = (INT64)lseek(Device, 0, SEEK_END);
lseek(Device, 0, SEEK_SET);
我不太熟悉在非Windows平台上进行编程,所以请原谅任何看起来奇怪的地方。我的问题如下:
- 这是在Mac OS X下打开原始磁盘的正确方法吗?
- 可能导致返回磁盘大小为0的原因是什么?
涉及的磁盘是未格式化的磁盘,但对于那些想从磁盘工具中获取信息的人(已删除非重要内容):
Name : ST920217 AS Media
Type : Disk
Partition Map Scheme : Unformatted
Disk Identifier : disk1
Media Name : ST920217 AS Media
Media Type : Generic
Writable : Yes
Total Capacity : 20 GB (20,003,880,960 Bytes)
Disk Number : 1
Partition Number : 0
lseek64
)。可以尝试使用ioctl
或fcntl
来获取大小,否则您必须通过某些特殊的OSX特定函数来获取信息。 - Some programmer dudelseek(Device, 0x7FFFFFFF - 1, SEEK_SET)
实际上返回的是0x7FFFFFFE,因此要么是位被丢弃了,要么是磁盘不支持lseek(..., 0, SEEK_END);
,但据我所知它们应该支持。编辑:我不知道为什么之前没有执行lseek(Device, 0xFFFFFFFF + 5, SEEK_SET)
,但那会返回4,所以我认为是位被丢弃了。 - Lander