ファイルを作成し、場所128に移動してデータを書き込みますが、読み取り中に128で書き込みを行っていますが、128ではなくオフセット0から読み取る必要があります。
書き込み後、ファイルの 16 進数を出力します。そのページに書き込んでいるときに、データはダンプ 1 (ロケーション 128) に出力されるはずです。ただし、ダンプ 0 (場所 0) に表示されます。
外部からのファイルの 16 進ダンプは、データが私が書き込んだ場所 (128) であることを示しています。
モードやファイルのアクセス許可と関係がありますか? 私はLinux OSに取り組んでいます。
void readyCache() {
fd = open("database.dat",O_RDWR|O_TRUNC|O_CREAT , S_IRUSR|S_IWUSR);
}
char* getPage(long pageNumber, int fd) {
long offset;
char* buffer = (char *)malloc(pageSize);
offset = (pageNumber)*pageSize;
lseek(fd, offset+pageSize, SEEK_SET);
lseek(fd, offset, SEEK_SET);
read(fd, buffer, pageSize);
return buffer;
}
void setPage(long pageNumber,char* pageData, int fd) {
long offset;
offset = (pageNumber)*pageSize;
lseek(fd, offset, SEEK_SET);
write(fd, pageData, pageSize);
}
void hexdump(int fileDescriptor1, long pageNumber) {
cout << endl;
unsigned char readChar;
int iterator = 0, j = 0;
char * tempBuffer = (char *)malloc(pageSize);
tempBuffer = getPage(pageNumber, fileDescriptor1);
for(int i=0;i<pageSize;i++) {
readChar = tempBuffer[i];
iterator++;
j++;
printf("%02x ", readChar);//%02x
if (iterator == 16) {
iterator = 0;
cout<<endl;
}
}
}
int main() {
readyCache();
char * tempBuffer = getPage(1, fd);
int a = 1000;
memcpy(tempBuffer, &a, sizeof(int));
setPage(1,tempBuffer, fd);
cout<<"\nDump 0\n";
hexdump(fd, 0);
cout<<"\nDump 1\n";
hexdump(fd, 1);
close(fd);
return 0;
}