Merge remote-tracking branch 'origin/victortung'

This commit is contained in:
Victor 2023-11-06 17:46:24 -08:00
commit 94a1496127
2 changed files with 24 additions and 59 deletions

View File

@ -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;
} }

View File

@ -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);
} }