Я пытаюсь извлечь из файла информацию о структурной переменной.
global.h
// DEFINITION OF EACH DIRECTORY BLOCK - MUST FIT INSIDE A SINGLE BLOCK
typedef struct {
char name[SIFS_MAX_NAME_LENGTH];
time_t modtime; // time last modified <- time()
uint32_t nentries;
struct {
SIFS_BLOCKID blockID; // of the entry's subdirectory or file
uint32_t fileindex; // into a SIFS_FILEBLOCK's filenames[]
} entries[SIFS_MAX_ENTRIES];
} SIFS_DIRBLOCK;
file1.c
int SIFS_mkvolume(const char *volumename, size_t blocksize, uint32_t nblocks)
{
FILE *vol = fopen(volumename, "w");
// DEFINE AND INITIALISE VARIABLES FOR header, bitmap, and blocks
SIFS_VOLUME_HEADER header = {
.blocksize = blocksize,
.nblocks = nblocks,
};
SIFS_BIT bitmap[nblocks];
bitmap[SIFS_ROOTDIR_BLOCKID] = SIFS_DIR; // the root directory
for(int b=1 ; b<nblocks ; ++b) {
bitmap[b] = SIFS_UNUSED;
}
char oneblock[blocksize];
SIFS_DIRBLOCK rootdir_block;
memset(&rootdir_block, 0, sizeof rootdir_block); // cleared to all zeroes
rootdir_block.name[0] = '\0';
rootdir_block.modtime = time(NULL);
rootdir_block.nentries = 0;
memset(oneblock, 0, sizeof oneblock); // cleared to all zeroes
memcpy(oneblock, &rootdir_block, sizeof rootdir_block);
// WRITE ALL OF THE INITIALISED SECTIONS TO THE VOLUME
fwrite(&header, sizeof header, 1, vol);
fwrite(bitmap, sizeof bitmap, 1, vol);
fwrite(oneblock, sizeof oneblock, 1, vol); // write rootdir
memset(oneblock, 0, sizeof oneblock); // reset to all zeroes
for(int b=1 ; b<nblocks ; ++b) {
fwrite(oneblock, sizeof oneblock, 1, vol);
}
// FINISHED, CLOSE THE VOLUME
fclose(vol);
// AND RETURN INDICATING SUCCESS
return 0;
}
Если я хочу получить доступ к информации о будущем, которая была rootdir_block
, как мне это сделать?
Я попытался это сделать:
file2.c
FILE *fp = fopen(volumename, "r+");
if(fp != NULL){
fseek(fp,sizeof header,SEEK_SET);
fread(//not sure what to do here);
}
В сущности, я хочу иметь возможность извлечь информацию о rootdir_block
, который является структурой. Не уверен, как это сделать. Спасибо.