Ho un'applicazione multithread che sta aprendo e leggendo lo stesso file (non scrivendo). Sto aprendo un descrittore di file diverso per ogni thread (ma tutti puntano allo stesso file). Ogni thread legge quindi il file e può chiuderlo e aprirlo di nuovo se viene raggiunto EOF. Va bene? Se eseguo fclose() su un descrittore di file, influisce sugli altri descrittori di file che puntano allo stesso file?Descrittori di file multipli per lo stesso file, C
risposta
Va bene. È possibile aprire tutte le volte che si desidera lo stesso file e ciascun descrittore di file sarà indipendente l'uno dall'altro.
Questo dovrebbe funzionare, a condizione che ogni thread abbia il proprio handle di file. Poiché si menziona l'uso di fclose()
, ciò suggerisce che si sta utilizzando anche fopen()
in ogni thread e che ogni thread ha effetto solo sulla propria variabile FILE *
.
C'è un problema?
Per i sistemi Linux non è necessario più descrittori di file per farlo. È possibile condividere un singolo descrittore di file e utilizzare pread per eseguire in modo atomico un'operazione di ricerca/lettura senza modificare affatto il descrittore di file.
'pread' è POSIX quindi non è limitato a Linux. –
- 1. Bash: descrittori di file
- 2. Moduli multipli che sovrascrivono lo stesso core file in Magento
- 3. Percorsi multipli per lo stesso controller
- 4. Descrittori file di chiusura logstash?
- 5. Descrittori di socket e file
- 6. C++ Genitori multipli con lo stesso nome variabile
- 7. Certificati APNS multipli nello stesso file di certificato
- 8. Percorsi di uscita multipli per un file di progetto C#
- 9. Automake e file con lo stesso nome
- 10. Retrofit - Endpoint multipli con lo stesso RestAdapter
- 11. (Windows) Apre lo stesso file contemporaneamente
- 12. Scrittura su più descrittori di file
- 13. Come funzionano i descrittori di file?
- 14. Leggere e scrivere sullo stesso file usando lo stesso flusso
- 15. perché devo includere un file di intestazione .h nel file .c con lo stesso nome?
- 16. Quali sono i valori possibili per i descrittori di file?
- 17. file tar multipli (file di origine) nel file rpm.spec
- 18. Excel.Workbook.SaveAs (...) con lo stesso nome file
- 19. PHP Caricamento file e sovrascrittura file con lo stesso nome
- 20. Dlopen restituirà lo stesso handle per due chiamate con lo stesso file?
- 21. Rails Postgresql schemi multipli e lo stesso nome tabella
- 22. Utilizzare lo stesso file per stdin e stdout con reindirizzamento
- 23. Creare intenzionalmente due file per avere lo stesso hash?
- 24. Curl per scaricare e caricare lo stesso file contemporaneamente
- 25. Eclipse Maven mostra più percorsi per lo stesso file
- 26. Log4j file multipli
- 27. La creazione di un nuovo thread Descrittori di file duplicati e descrittori di socket in Linux?
- 28. Spazi dei nomi multipli sotto lo stesso modulo in ZF2
- 29. Codeigniter file multipli upload estensione file mess
- 30. Ricerca file multipli per più parole
Fondamentalmente, ho creato un array di due puntatori di file (perché ogni thread leggerà, ad esempio, file x), per un totale di thread y. quindi il mio array FILE * è array [y] [x]. Per un determinato thread i, apro un file tramite fopen (array [i] [0]) ad esempio (per il file 0). Poi leggo (fread) il file (non tutto in una volta però) e faccio altri compiti (non si verifica alcuna scrittura di file, però). Durante una lettura, se EOF viene raggiunto, lo faccio fclose e poi fopen di nuovo. La mia preoccupazione era che, quando fclose e fopen, potessi in qualche modo influenzare gli altri puntatori FILE * dagli altri thread che puntano allo stesso file che ho eseguito f close o – Gigi
Supponendo che il tuo 'fopen()' sia un refuso (dovrebbe essere 'array [i] [0] = fopen' ...), allora sì, funzionerà bene. A condizione che ogni thread non manipoli i dati appartenenti ad altri thread. – wallyk
Grazie. Sì, tutti i thread stanno facendo a questo file sono fopen(), fread() e fclose(). – Gigi