From d379f6d7f04f56c2f7fa475e9aba0939b73742eb Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 6 Nov 2023 00:24:57 -0800 Subject: [PATCH] add destructor to close fd to open device one time, and make dir be const char* type --- include/rawdisk.h | 43 +++++++++++-------------------------------- test/layer0.cpp | 7 +------ 2 files changed, 12 insertions(+), 38 deletions(-) diff --git a/include/rawdisk.h b/include/rawdisk.h index 62074df..ffc7f1c 100644 --- a/include/rawdisk.h +++ b/include/rawdisk.h @@ -8,21 +8,20 @@ class RawDisk{ - char* dir; + int fd; + const char* dir; off_t numSectors; off_t diskSize; public: - RawDisk(char *directory){ + RawDisk(const char *directory){ dir = directory; /*dir = strdup("/dev/vdc"); numSectors = 62914560; diskSize = 32212254720;*/ - int fd; - // 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) { perror("Error opening device"); exit(1); @@ -41,58 +40,41 @@ public: printf("====Initializing RawDisk====\n"); printf("Number of sectors: %llu\n", numSectors); printf("Disk size (in bytes): %llu\n", diskSize); + } - close(fd); + ~RawDisk() { + if (fd != -1) { + close(fd); + } } int rawdisk_read(off_t blockNumber, char *buffer){ - int fd; - - 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); return -1; } - // Read a block of data + // Read a 512 byte-size block of data ssize_t bytesRead = read(fd, buffer, 512); if (bytesRead == -1) { perror("Error reading from device"); - close(fd); return -1; } - // Process the data (e.g., data recovery or analysis) - close(fd); - + return 0; } int rawdisk_write(off_t blockNumber, char *buffer){ - int fd; - - fd = open(dir, O_WRONLY); - 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); return -1; } @@ -100,12 +82,9 @@ public: 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; } diff --git a/test/layer0.cpp b/test/layer0.cpp index 1b8faeb..3a73b0b 100644 --- a/test/layer0.cpp +++ b/test/layer0.cpp @@ -4,12 +4,7 @@ #include "rawdisk.h" int main(int argc, char *argv[]) { - char *d = NULL; - if(argc < 2){ - d = strdup("/dev/vdc"); - }else{ - d = argv[1]; - } + const char* d = (argc < 2) ? "/dev/vdc" : argv[1]; RawDisk *H = new RawDisk(d);