revise rawdisk R/W API to set with offset and length

This commit is contained in:
Victor 2023-11-06 14:00:14 -08:00
parent d379f6d7f0
commit b25f0f167d
2 changed files with 14 additions and 23 deletions

View File

@ -14,7 +14,7 @@ class RawDisk{
off_t diskSize; off_t diskSize;
public: public:
RawDisk(const 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;
@ -48,18 +48,13 @@ public:
} }
} }
int rawdisk_read(off_t blockNumber, char *buffer){ int rawdisk_read(off_t offset, char *buffer, size_t length) {
// Calculate the offset in bytes if (lseek(fd, offset, SEEK_SET) == (off_t)-1) {
off_t offset = blockNumber * 512; perror("Error seeking to offset");
// Move the file pointer to the desired block
if (lseek(fd, offset, SEEK_SET) == -1) {
perror("Error seeking to block");
return -1; return -1;
} }
// Read a 512 byte-size 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");
return -1; return -1;
@ -68,20 +63,16 @@ public:
return 0; return 0;
} }
int rawdisk_write(off_t blockNumber, char *buffer){ // Write a specified number of bytes at a given byte offset
// Calculate the offset in bytes int rawdisk_write(off_t offset, char *buffer, size_t length) {
off_t offset = blockNumber * 512; if (lseek(fd, offset, SEEK_SET) == (off_t)-1) {
perror("Error seeking to offset");
// Move the file pointer to the desired block
if (lseek(fd, offset, SEEK_SET) == -1) {
perror("Error seeking to block");
return -1; return -1;
} }
// Write a block of data ssize_t bytesWritten = write(fd, buffer, length);
ssize_t bytesWrite = write(fd, buffer, 512); if (bytesWritten == -1) {
if (bytesWrite == -1) { perror("Error writing to device");
perror("Error writing from device");
return -1; return -1;
} }

View File

@ -15,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, sizeof(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);
} }