revise rawdisk R/W API to set with offset and length
This commit is contained in:
parent
d379f6d7f0
commit
b25f0f167d
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user