|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 2007
Messaggi: 642
|
[C] salvare un file di testo in una matrice di char
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()? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
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 |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2007
Messaggi: 642
|
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!
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
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
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
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.
![]() 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). |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
scusa ma è una copia di quella matrice, le modifiche mica si ripercuotono sugli altri processi, i processi non condividono mica la memoria |:
|
![]() |
![]() |
![]() |
#7 | |
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
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
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Dec 2007
Messaggi: 642
|
Grazie dell'aiuto ragazzi, ho risolto riorganizzando meglio i processi...
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:35.