Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C] Salvare una Struttura in un File Binario?

    C'e' un modo per salvare questa struttura in memoria condivisa e/o su un file
    binario e/o in un database (MySQL) ? (In C)

    codice:
    typedef struct _socket {
           int fd;
           SSL *ssl;               /* Allocato Dinamicamente */
           SSL_CTX *ctx;           /* Allocato Dinamicamente */
           char *hostname;         /* Allocato Dinamicamente */
           unsigned short port;
           SocketState state;      /* enum */
    } Socket;

    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Puoi memorizzare la struttura in memoria condivisa ma i puntatori ai vari membri devono puntare anch'essi alla memoria condivisa in cui memorizzerai i dati puntati stessi.

    Cioe', non solo devi mettere in memoria condivisa la struttura ma, ad esempio se il dato puntato da hostname e' NOMEPC

    char *hostname;

    deve puntare alla memoria condivisa e la stringa NOMEPC deve stare in memoria condivisa.

    Altrimenti un processo che *non ha creato il dato* potrà accedere al puntatore ma non al dato puntato perche' appartenente ad un altro address space.

  3. #3
    e come faccio a mettere un puntatore gia' allocato in memoria condivisa?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Ammesso che le strutture dati SSL e SSL_CTX non contengano a loro volta dei puntatori e non siano degli array puoi fare:
    codice:
    FILE *output = fopen("FileDiOutput", "wb");
    Socket sock;
    // Ci fai quello che vuoi
    fwrite(&(socket.fd), sizeof(int), 1, output);
    fwrite(socket.ssl, sizeof(SSL), 1, output);
    fwrite(socket.ctx, sizeof(SSL_CTX), 1, output);
    fwrite(socket.hostname, 1, strlen(socket.hostname), output);
    fwrite(&(socket.port), sizeof(short int), 1, output);
    fwrite(&(socket.state), sizeof(SocketState), 1, output);
    Per salvarlo in un file binario.

  5. #5
    Originariamente inviato da pprllo
    Ammesso che le strutture dati SSL e SSL_CTX non contengano a loro volta dei puntatori e non siano degli array puoi fare:
    codice:
    FILE *output = fopen("FileDiOutput", "wb");
    Socket sock;
    // Ci fai quello che vuoi
    fwrite(&(socket.fd), sizeof(int), 1, output);
    fwrite(socket.ssl, sizeof(SSL), 1, output);
    fwrite(socket.ctx, sizeof(SSL_CTX), 1, output);
    fwrite(socket.hostname, 1, strlen(socket.hostname), output);
    fwrite(&(socket.port), sizeof(short int), 1, output);
    fwrite(&(socket.state), sizeof(SocketState), 1, output);
    Per salvarlo in un file binario.
    Teoricamente. In pratica dubito funzioni.
    "Qualsiasi esperto ha paura di combattere usando la katana vera. Anch'io. Ma non ignoro la mia paura, riesco ad accettarla, e a metterla da parte accanto a me".

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da _sys/sid
    e come faccio a mettere un puntatore gia' allocato in memoria condivisa?
    Devi replicare in memoria condivisa la struttura e copiare i dati allocati dalla memoria del processo in quella condivisa. In seguito aggiusti i puntatori copiati nell'area condivisa facendoli puntare a quelli appena copiati nell'area condivisa ...

  7. #7
    devo copiare esattamente la struttura ma non so' se SSL e SSL_CTX contengono dei puntatori...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.