View Full Version : [C] salvare un file di testo in una matrice di char
Red_Knight
29-12-2010, 17:38
Salve a tutti, mi rendo conto che si tratta di una domanda vergognosa anche per un principiante, ma ho un problema che non riesco a risolvere.
All'interno di una funzione devo far caricare un file di testo e salvarlo in una matrice di char, e poi questa matrice deve essere a disposizione del main, delle altre funzioni e di eventuali processi figli. Ora il dilemma è: questa matrice di char devo dichiararla globale (il programma ha un file header.h dove metto tutte le cose in comune) oppure devo effettuare dei passaggi a/da funzione? Devo usare malloc()?
quello che vuoi sapere è come condividere quella memoria?
potresti usare le funzioni di file mapping dell'os su cui stai sviluppando (visto che parli anche di processi figli sarà un unixlike, quindi mmap etc sono le funzioni) se ti va bene vederlo come un array piuttosto che come una matrice
Red_Knight
30-12-2010, 14:44
Sì, sono su Ubuntu. Il problema è che posso utilizzare soltanto stdio.h, stdlib.h, unistd.h e curses.h per realizzare un clone di Pacman (in bianco e nero e con caratteri). È per un esame. La matrice di char mi serve per contenere lo stage (che dovrebbe essere visibile a un bel po' di processi), e sto cercando di caricarlo da file di testo (così è più facile da editare). In teoria dovrebbe essere la cosa più semplice (caricare in memoria una manciata di byte a uso e consumo di un programmino semplicissimo), ma non mi riesce!
non saprei sinceramente, non credo ci siano modi per ottenere memoria condivisa potendo usare solo quegli header (e non puoi fare neanche il locking sul file per fare semplicemente mutua esclusione sul file) quindi non vedo come tu possa risolvere onestamente :E
Supdario
31-12-2010, 12:41
Ti basta fare una variabile globale che contiene la matrice, poi leggi la dimensione del file, allochi la matrice (con malloc) in base alla dimensione, e leggi il contenuto. :asd:
Da quel momento la variabile sarà accessibile a tutte le funzioni del programma. Se puoi vuoi avviare un processo figlio basta che usi la funzione "fork", che genera un processo esattamente identico, quindi anche dal processo figlio sarà possibile accedere alla matrice (che è già stata allocata precedentemente con malloc e quindi ha un indirizzo di memoria unico, condiviso a tutti i processi).
scusa ma è una copia di quella matrice, le modifiche mica si ripercuotono sugli altri processi, i processi non condividono mica la memoria |:
Supdario
31-12-2010, 13:56
scusa ma è una copia di quella matrice, le modifiche mica si ripercuotono sugli altri processi, i processi non condividono mica la memoria |:
Giusto, non ci avevo pensato. :asd: L'unica opzione è di usare delle funzioni per gestire la shared memory, come shmget, che non so se si trova in unistd.h...
eh ma mmap è ancora più comoda per fare quella roba, una volta che hai il vettore in memoria la matrice la puoi ricavare, diciamo.. il problema sono gli header che puoi includere
Red_Knight
04-01-2011, 23:40
Grazie dell'aiuto ragazzi, ho risolto riorganizzando meglio i processi...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.