我正在尝试从Ubuntu 上的/dev/sda磁盘读取一个扇区,但 fread 总是返回 0,我似乎无法理解它为什么这样做,这是读取该扇区的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
void read_sector(char *physical_disk, int num_sec) {
char *diskName = "/dev/";
char *ch1 = strstr(physical_disk,"sd");
char *ch2 = strstr(physical_disk,"hd");
if((ch1==NULL) && (ch2 == NULL)) {
printf("Error, that is not a physical disk's name. \n");
}
else {
int sect,n;
int len = strlen(diskName) + strlen(physical_disk) + 2;
char *str = (char*)malloc(len);
strcpy(str,diskName);
unsigned char buffer[512];
long int sec = 512*num_sec;
FILE *disk = NULL;
strcat(str, physical_disk);
disk = fopen(diskName, "rb");
if (disk==NULL) printf("error, disk can't be opened \n");
else {
sect = fseek(disk, sec, SEEK_SET);
if(sect != 0) printf("fseek error %d \n", sect);
else {
n = fread(buffer,512,1,disk);
if(n<=0) printf("fread error %d \n", n);
else printf("number of elements read : %d \n", n);
}
}
fclose(disk)
}
}
int main(int argc, char const *argv[])
{
read_sector("sda", 3);
return(0);
}
关于它为什么返回 0 的任何想法?非常感谢你!