Merge remote-tracking branch 'origin/victortung'
This commit is contained in:
commit
94a1496127
@ -8,21 +8,20 @@
|
|||||||
|
|
||||||
class RawDisk{
|
class RawDisk{
|
||||||
|
|
||||||
char* dir;
|
int fd;
|
||||||
|
const char* dir;
|
||||||
off_t numSectors;
|
off_t numSectors;
|
||||||
off_t diskSize;
|
off_t diskSize;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RawDisk(char *directory){
|
RawDisk(const char *directory) : fd(-1), dir(nullptr), numSectors(0), diskSize(0) {
|
||||||
dir = directory;
|
dir = directory;
|
||||||
/*dir = strdup("/dev/vdc");
|
/*dir = strdup("/dev/vdc");
|
||||||
numSectors = 62914560;
|
numSectors = 62914560;
|
||||||
diskSize = 32212254720;*/
|
diskSize = 32212254720;*/
|
||||||
|
|
||||||
int fd;
|
|
||||||
|
|
||||||
// Open the block device (replace /dev/sdX with the actual device)
|
// Open the block device (replace /dev/sdX with the actual device)
|
||||||
fd = open(dir, O_RDONLY);
|
fd = open(dir, O_RDWR); // Allow read and write
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
perror("Error opening device");
|
perror("Error opening device");
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -41,71 +40,42 @@ public:
|
|||||||
printf("====Initializing RawDisk====\n");
|
printf("====Initializing RawDisk====\n");
|
||||||
printf("Number of sectors: %llu\n", numSectors);
|
printf("Number of sectors: %llu\n", numSectors);
|
||||||
printf("Disk size (in bytes): %llu\n", diskSize);
|
printf("Disk size (in bytes): %llu\n", diskSize);
|
||||||
|
|
||||||
close(fd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int rawdisk_read(off_t blockNumber, char *buffer){
|
~RawDisk() {
|
||||||
int fd;
|
if (fd != -1) {
|
||||||
|
|
||||||
fd = open(dir, O_RDONLY);
|
|
||||||
if (fd == -1) {
|
|
||||||
perror("Error opening device");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Calculate the offset in bytes
|
|
||||||
off_t offset = blockNumber * 512;
|
|
||||||
|
|
||||||
// Move the file pointer to the desired block
|
|
||||||
if (lseek(fd, offset, SEEK_SET) == -1) {
|
|
||||||
perror("Error seeking to block");
|
|
||||||
close(fd);
|
close(fd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int rawdisk_read(off_t offset, char *buffer, size_t length) {
|
||||||
|
if (lseek(fd, offset, SEEK_SET) == (off_t)-1) {
|
||||||
|
perror("Error seeking to offset");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read a block of data
|
ssize_t bytesRead = read(fd, buffer, length);
|
||||||
ssize_t bytesRead = read(fd, buffer, 512);
|
|
||||||
if (bytesRead == -1) {
|
if (bytesRead == -1) {
|
||||||
perror("Error reading from device");
|
perror("Error reading from device");
|
||||||
close(fd);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process the data (e.g., data recovery or analysis)
|
return 0;
|
||||||
close(fd);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int rawdisk_write(off_t blockNumber, char *buffer){
|
// Write a specified number of bytes at a given byte offset
|
||||||
int fd;
|
int rawdisk_write(off_t offset, char *buffer, size_t length) {
|
||||||
|
if (lseek(fd, offset, SEEK_SET) == (off_t)-1) {
|
||||||
fd = open(dir, O_WRONLY);
|
perror("Error seeking to offset");
|
||||||
if (fd == -1) {
|
|
||||||
perror("Error opening device");
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate the offset in bytes
|
ssize_t bytesWritten = write(fd, buffer, length);
|
||||||
off_t offset = blockNumber * 512;
|
if (bytesWritten == -1) {
|
||||||
|
perror("Error writing to device");
|
||||||
// Move the file pointer to the desired block
|
|
||||||
if (lseek(fd, offset, SEEK_SET) == -1) {
|
|
||||||
perror("Error seeking to block");
|
|
||||||
close(fd);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write a block of data
|
|
||||||
ssize_t bytesWrite = write(fd, buffer, 512);
|
|
||||||
if (bytesWrite == -1) {
|
|
||||||
perror("Error writing from device");
|
|
||||||
close(fd);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Process the data (e.g., data recovery or analysis)
|
|
||||||
close(fd);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,12 +4,7 @@
|
|||||||
#include "rawdisk.h"
|
#include "rawdisk.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
char *d = NULL;
|
const char* d = (argc < 2) ? "/dev/vdc" : argv[1];
|
||||||
if(argc < 2){
|
|
||||||
d = strdup("/dev/vdc");
|
|
||||||
}else{
|
|
||||||
d = argv[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
RawDisk *H = new RawDisk(d);
|
RawDisk *H = new RawDisk(d);
|
||||||
|
|
||||||
@ -20,11 +15,11 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
//use number to substitute H->getnumSector(), getnumSectors() are not yest implemented
|
//use number to substitute H->getnumSector(), getnumSectors() are not yest implemented
|
||||||
for(off_t i = 0; i < 10; i++) {
|
for(off_t i = 0; i < 10; i++) {
|
||||||
H->rawdisk_write(i, buf);
|
H->rawdisk_write(i*512, buf, strlen(buf));//Change write_API
|
||||||
}
|
}
|
||||||
//use number to substitute H->getnumSector(), getnumSectors() are not yest implemented
|
//use number to substitute H->getnumSector(), getnumSectors() are not yest implemented
|
||||||
for(off_t i = 0; i < 10; i++) {
|
for(off_t i = 0; i < 10; i++) {
|
||||||
H->rawdisk_read(i, readBuffer);
|
H->rawdisk_read(i*512, readBuffer, sizeof(readBuffer));//Change read_API
|
||||||
assert(strncmp(readBuffer, buf, strlen(buf)) == 0);
|
assert(strncmp(readBuffer, buf, strlen(buf)) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user