问题描述
我正在尝试用c创建一个简单的脚本,该脚本能够识别出于教育目的的(设备)的坏扇区。在我的示例中,我使用具有只读模式的HD。背后的想法很简单,但也许太简单了,我会知道这是否正确,并最终以其他任何方式达到我的目标。
让我们看一下我的代码:
#include<stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc,char ** argcv){
size_t size_block = 512;
int fd = open("/dev/disk2",O_RDONLY);
ssize_t bytes_read = 1;
char *buff = malloc(size_block * sizeof(char));
if (buff == NULL){
exit(EXIT_FAILURE);
}
while (bytes_read > 0){
bytes_read = read(fd,buff,size_block);
int position = lseek(fd,SEEK_CUR);
if (bytes_read == -1){
perror("main");
}
//printf("%s",buff); //prints the content of what I read
if (bytes_read < size_block){
printf("the block at %p address is probably damaged",&position);
}
}
free(buff);
close(fd);
return 0;
}
因此,我尝试通过每次尝试查找512字节的文件指针来读取具有读取的系统调用的HD扇区。这是第一个问题:由于首选的I / O块大小为2048字节(使用sys / stat.h的stat检索到的信息),因此每次512字节而不是2048字节都正确查找吗?
另外,由于我假设如果我无法读取扇区的全部字节,则可能会损坏扇区,因此要比较扇区(bytes_read < size_block)
,以检查扇区是否损坏。但是,如果我到达“文件”的末尾,并且此方法不是512的倍数,则即使扇区未损坏,也将损坏该扇区。我写的东西真的有用吗?否则,我该怎么做?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)