这适用于 Linux,但不适用于(如我所愿)在 FreeBSD 上:
我想锻炼一下我的 CD-ROM 驱动器,以防止镜头上的灰尘。在 Linux 上,我(以 root 身份)运行我编写的 C 程序,该程序来回搜索,每次都读取一个块。在 FreeBSD 上,这个程序并没有走得太远。我可以打开设备并寻找(比如说)块 1。但是当我尝试读取块时,我收到错误 22(EINVAL)。无论设备是否已安装(-t cd9660),它都会在第 1 块第一次读取时失败。我该如何进行?
完整程序在这里。相关片段:
lo_fd=Open(ar_argv[1],
O_RDONLY,
0
);
lo_high_bit=1;
while(lo_high_bit>0)
{
if(lseek(lo_fd,
lo_high_bit,
SEEK_SET
)
==
(off_t)-1
)
{
lo_high_bit>>=1;
break;
}
if(read(lo_fd,
lo_buffer,
1
)
!=
1
)
{
lo_high_bit>>=1;
break;
}
lo_high_bit<<=1;
}