在C中搜索设备的坏扇区

问题描述

我正在尝试用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 (将#修改为@)