Salut Je veux lire quelques informations dans une structure que j'ai écrit dans le fichier avec fwrite
mais il y a un problème que je ne peux pas extraire ces informations. Je suis 2 fichierC - Lire struct dans le fichier
tttfs.h:
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
typedef struct _disk disk;
typedef struct _block block;
struct _block{
uint8_t *unBlock;
};
struct _disk{
int id;
block *diskBlock;
};
tfs_create.c:
#include "tttfs.h"
uint8_t little[4];
int tttfs_create(int size, char *name);
void inttolitend(uint32_t x, uint8_t* lit_int);
int main(){
tttfs_create(7, "disk.tfs");
int f = 0;
if((f=open("disk.tfs",O_RDONLY)) < -1) //I took this from an example.
return 1;
disk *d = malloc(sizeof(disk)); //Create a disk
d->diskBlock = malloc(1024); //The block where I want to write the information from the file.
lseek(f,0,SEEK_SET);//I want to read from the beginning
read(f,d->diskBlock,1024); //I write all the information from the beginning to 1024th byte of my file
int i;
for(i=0; i<4; i++){
printf("%d\n", (uint8_t)&d->diskBlock[i]);//print my result.
}
}
int tttfs_create(int size, char *name){
FILE *f = NULL;
if ((f = fopen(name, "wb"))!=NULL) /** si ouverture ok **/
{
disk *d = malloc(sizeof(disk));
d->diskBlock = malloc(sizeof(block) * size);
d->id = 1;
int i;
for(i = 0; i<size; i++){
d->diskBlock[i].unBlock = malloc(sizeof(uint8_t) * 1024);
}
inttolitend(size, little);
for(i = 0; i<4; i++){
d->diskBlock[0].unBlock[i] = little[i];
}
for(i = 0; i<size; i++){
fwrite(&d->diskBlock[i],sizeof(block),1,f);
}
}
else
printf("Erreur\n\n");
return 0;
}
void inttolitend(uint32_t x, uint8_t* lit_int){
lit_int[3] = (uint8_t)x/(256*256*256);
lit_int[2] = (uint8_t)(x % (256*256*256))/(256*256);
lit_int[1] = (uint8_t)((x % (256*256*256)) % (256*256))/256;
lit_int[0] = (uint8_t)((x % (256*256*256)) % (256*256)) % 256;
}
Avec cela, je crée un disque avec 7 bloc et je vous écris tout le bloc 7 dans mon dossier. Dans mon premier bloc j'ai écrit la taille de mon disque (7) en petit boutiste. Donc, bloquer [0] = 00, bloquer [1] = 00, bloquer [2] = 01, bloquer [3] = 11 ou quelque chose comme ça.
Mais quand j'imprimer mon résultat je reçois:
0
8
16
24
pas ce que je pensais que j'essaie sans read
et je suis le même résultat. Donc, mon programme n'a pas écrit les informations du disque. Ou il y a un problème quand j'écris mon bloc dans le disque?
est 'fwrite (& d-> diskBlock [i], sizeof (bloc), 1, f),' encore mal . –
@ iharob Qu'est-ce que je dois changer? 'sizeof'? – Jackie
Ajouter la taille du bloc aussi, 'sizeof (block) + 1024' je pense. S'il vous plaît soyez prudent et réfléchir, je me souviens de votre question précédente, mais je ne suis pas sûr à 100%. –