Lettura e scrittura su file .bin

di il
11 risposte

Lettura e scrittura su file .bin

Salve a tutti e grazie in anticipo per l'aiuto.

dovrei fare un programma in c che prende in input 2 file bin "person.bin" e "knows.bin" e restituisce 2 files .bin "person1.bin" e "knows1.bin" in cui si mantengono i dati delle persone amiche che vivono nella stessa città.
I dati relativi a dove vivono sono all'interno del file person.bin mentre la relazione di amicizia è verificabile in knows.bin.
Il person.bin è un array di struct Person in cui ci sono salvati:
-id_person (id della persona).
-city (citta in cui vive).
-knows_offset(puntatore che indica l'inizio dell'array delle amicizie nel file knows.bin).
-knows_n(lunghezza dell'array delle amicizie dell'utente).
Nel file knows.bin array di unsigned int, contiene array offset all'interno di person.bin.
La relazione di amicizia deve essere verificata in entrambi i versi a->b e b->a.
Qualcuno mi saprebbe aiutare?

11 Risposte

  • Re: Lettura e scrittura su file .bin

    Aiutare come?
  • Re: Lettura e scrittura su file .bin

    -Come faccio a puntare ai file di input.
    -Come si crea il file di output.
    -Come si punta agli elementi all'interno del file di input.
    -Come punto al file di output.
    -Come si punta agli elementi all'interno del file di output.
    -Come faccio a scrivere di volta in volta nel file di output quando trovo un elemento che soddisfa i requisiti.
    Grazie ancora
  • Re: Lettura e scrittura su file .bin

    Tutte domande che denotano una mancanza di preparazione di base. Per affrontare un esercizio del genere, certe cognizioni dovresti averle.

    Per aprire un file utilizzerai la funzione

    fopen

    e dovendo accedere in binario, userai il modo "b" con w o r se scrivi o leggi.
  • Re: Lettura e scrittura su file .bin

    Si...infatti io non piaccio al c e il c non piace a me... ecco perchè sto chiedendo aiuto.
    Che la funzione che apre il file si chiama fopen e per scrivere si fa fwrite e per leggere fread si quello ci sono arrivato anche io .
    Se qualcuno puo gentilmente aiutarmi anche con piccoli esempi o link ne sarei grato.
    Buona sera
  • Re: Lettura e scrittura su file .bin

    Di esempio ne trovi ovunque su internet, in cui si spiega come funzionano le funzioni in questione. Ovviamente non trovi il tuo codice da copiare ...
  • Re: Lettura e scrittura su file .bin

    Ok, grazie per il non aiuto...se una discussione su un forum di aiuto si deve concludere con un trovatelo su internet...mah...mi chiedo che aiuto sia...in molte altre discussioni leggo che vengono riportati codici di esempio... ma proprio a me mi doveva rispondere un tipo come te ...BELLA!
  • Re: Lettura e scrittura su file .bin

    Mi da problema di segmentazione sulla fwreite() funztion, qualcuno mi puo aiutare?
    Grazie

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/mman.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>

    #include "utils.h"




    Person *person_map;
    unsigned int *knows_map;

    unsigned long person_length, knows_length, interest_length;

    FILE *knows_out;
    FILE *outfile;



    int main(int argc, char *argv[]) {
    if (argc < 2) {
    fprintf(stderr, "Usage: [datadir] \n");
    exit(1);
    }

    person_map = (Person *) mmapr(makepath(argv[1], "person", "bin"), &person_length);
    knows_map = (unsigned int *) mmapr(makepath(argv[1], "knows", "bin"), &knows_length);



    unsigned int person_offset;
    unsigned long knows_offset, knows_offset2;

    Person *person, *knows;

    for (person_offset = 0; person_offset < person_length/sizeof(Person); person_offset++) {
    person = &person_map[person_offset];

    if (person_offset > 0 && person_offset % REPORTING_N == 0) {
    printf("%.2f%%\n", 100 * (person_offset * 1.0/(person_length/sizeof(Person))));
    }


    outfile=fopen("knows1.bin", "w+b");

    // check if friend lives in same city and likes artist
    for (knows_offset = person->knows_first;
    knows_offset < person->knows_first + person->knows_n;
    knows_offset++) {

    knows = &person_map[knows_map[knows_offset]];
    if (person->location != knows->location) continue; //check the same city


    // friendship must be mutual
    for (knows_offset2 = knows->knows_first; //moves trough the file
    knows_offset2 < knows->knows_first + knows->knows_n;
    knows_offset2++) {

    fwrite(&knows_offset, sizeof(unsigned int), 1, outfile);

    }
    }
    }


    }
  • Re: Lettura e scrittura su file .bin

    rewat1984 ha scritto:


    Ok, grazie per il non aiuto...se una discussione su un forum di aiuto si deve concludere con un trovatelo su internet...
    Non hai fatto una domanda a cui normalmente si risponde, ma una serie di domande dove hai detto praticamente che non conosci nulla e che non sai fare nulla del programma in questione.

    In altre discussioni chi chiede aiuto ha un solo dubbio su una parte di codice che ha scritto, non parte da zero nella scrittura completa di un progetto.
    ma proprio a me mi doveva rispondere un tipo come te ...BELLA!
    Sei stato sfortunato ... oppure il problema sei tu ...
  • Re: Lettura e scrittura su file .bin

    Questo è il codice che ho fatto...funziona...ora come posso sapere in che locazione di memoria sono andato a scrivere ogni volta??

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/mman.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>

    #include "utils.h"




    Person *person_map;
    unsigned int *knows_map, knows1_map;

    unsigned long person_length, knows_length, knwos1_length;

    FILE *knows_out;
    FILE *o1, *o2;



    int main(int argc, char *argv[]) {
    if (argc < 2) {
    fprintf(stderr, "Usage: [datadir] \n");
    exit(1);
    }

    person_map = (Person *) mmapr(makepath(argv[1], "person", "bin"), &person_length);
    knows_map = (unsigned int *) mmapr(makepath(argv[1], "knows", "bin"), &knows_length);
    char* knows1_map= makepath(argv[1], "knows1", "bin");
    //char* person1_map= makepath(argv[1], "person1", "bin"); <------------------ utils.h non rpesenti normalmente

    unsigned int person_offset;
    unsigned long knows_offset, knows_offset2;
    Person *person, *knows;

    o1=open_binout(knows1_map);
    //o2=open_binout(person1_map);<-------------------utils.h non rpesenti normalmente


    for (person_offset = 0; person_offset < person_length/sizeof(Person); person_offset++) {
    person = &person_map[person_offset];

    if (person_offset > 0 && person_offset % REPORTING_N == 0) {
    printf("%.2f%%\n", 100 * (person_offset * 1.0/(person_length/sizeof(Person))));
    }



    // check if friend lives in same city and likes artist
    for (knows_offset = person->knows_first;
    knows_offset < person->knows_first + person->knows_n;
    knows_offset++) {

    knows = &person_map[knows_map[knows_offset]];
    if (person->location != knows->location) continue; //check the same city


    // friendship must be mutual
    for (knows_offset2 = knows->knows_first; //moves trough the file
    knows_offset2 < knows->knows_first + knows->knows_n;
    knows_offset2++) {
    if (knows_map[knows_offset2] == person_offset) {
    fwrite(&knows_offset, sizeof(unsigned long), 1, o1);
    printf("%u", knows_offset);
    break;
    }
    }

    }
    }

    fclose(o1);
    }
  • Re: Lettura e scrittura su file .bin

    Oregon... visto che il codice va...possiamo dire con certezza che il problema sei tu... come ti dicevo se non hai voglia di aiutare, non rispondere ai post XD
  • Re: Lettura e scrittura su file .bin

    ... contento tu ...
Devi accedere o registrarti per scrivere nel forum
11 risposte