Ho provato a usare fopen in C, il secondo parametro è la modalità aperta. Le due modalità "r" e "rb" tendono a confondermi molto. Sembra che siano uguali. Ma a volte è meglio usare "rb". Quindi, perché esiste "r"? Spiegatemi dettagliatamente o con esempi. Grazie.quali sono le differenze tra r e rb in fopen
risposta
È necessario utilizzare "r"
per aprire file di testo. Diversi sistemi operativi hanno modi leggermente diversi di memorizzare il testo, e questo eseguirà le traduzioni corrette in modo che non sia necessario conoscere le idiosincrasie del sistema operativo locale. Ad esempio, saprai che i newline appariranno sempre come un semplice "\n"
, indipendentemente da dove viene eseguito il codice.
È necessario utilizzare "rb"
se si stanno aprendo file non di testo, perché in questo caso le traduzioni non sono appropriate.
Questo dipende dalla piattaforma. Su Unix, la modalità testo non fa nulla di speciale, quindi non gestirà ancora '\ r \ n' come' \ n'. –
L'idea è che '" r "' aprirà correttamente un "file di testo" sullo stesso sistema. Se stai aprendo un file di testo di Windows su Linux con '" r "', devi prenderti cura delle diverse convenzioni di fine linea, naturalmente. –
Se apri un file scritto in Windows su un sistema Linux, vedrai il comportamento. È necessario convertire il file in un file di testo Unix. Puoi farlo facilmente con un programma chiamato 'dos2unix', o in vim, dopo aver aperto un file, scrivi,:: se ff = unix', premi return, e poi salva. –
utilizzare "rb" per aprire un file binario. Poi i byte del file non sarà codificato quando si leggono le
- "r" è lo stesso di "rt" per Translated mode
- "rb" è modalità non tradotta.
Questo fa la differenza su Windows, almeno. Vedi quel link per i dettagli.
'" rt "' non è standard. –
Su Linux e Unix in generale, "r"
e "rb"
sono gli stessi. Più in particolare, un puntatore FILE
ottenuto da fopen()
in un file in modalità testo e in modalità binaria si comporta allo stesso modo su Unix. Su Windows e, in generale, su sistemi che utilizzano più di un carattere per rappresentare "newlines", un file aperto in modalità testo si comporta come se tutti quei caratteri fossero solo un carattere, '\n'
.
Se si desidera leggere leggere/scrivere file di testo su qualsiasi sistema, utilizzare "r"
e "w"
in fopen()
. Ciò garantirà che i file siano scritti e letti correttamente. Se si sta aprendo un file binario, utilizzare "rb"
e "wb"
, in modo che una sfortunata traduzione di nuova riga non comprometta i dati.
Si noti che una conseguenza del sistema sottostante che esegue la traduzione di nuova riga è che non è possibile determinare il numero di byte che è possibile leggere da un file utilizzando fseek(file, 0, SEEK_END).
Infine, vedere What's the difference between text and binary I/O? su comp.lang.c FAQs.
Sulla maggior parte dei sistemi POSIX, viene ignorato. Ma controlla il tuo sistema per essere sicuro.
XNU
La stringa modalità può anche includere la lettera 'b' sia come ultimo carattere o come un carattere tra i caratteri in una qualsiasi delle stringhe di due caratteri sopra descritti. Questo è strettamente compatibile con ISO/IEC 9899: 1990 ('ISO C90') e non ha alcun effetto; la 'b' è ignorata.
Linux stringa
La modalità può anche includere la lettera 'b' o come ultima carattere o come un personaggio tra i personaggi in una qualsiasi delle a due stringhe di caratteri sopra descritti. È strettamente compatibile con la compatibilità con C89 e non ha alcun effetto; la 'b' viene ignorata su tutti i sistemi conformi a POSIX, incluso Linux. (Gli altri sistemi potrebbero trattare i file di testo e i file binari in modo diverso e aggiungere la "b" potrebbe essere una buona idea se si esegue l'I/O su un file binario e si aspetta che il proprio programma possa essere portato su ambienti non UNIX.
- 1. Quali sono le differenze tra & e &&, | e || in R?
- 2. Quali sono le differenze tra "=" e "<-" in R?
- 3. Quali sono le differenze tra $ {} e # {}?
- 4. Quali sono le differenze importanti tra l'uso di fopen ($ url) e curl in PHP?
- 5. Quali sono/sono le principali differenze tra Flink e Storm?
- 6. Quali sono/sono le differenze tra MSBuild e TFSBuild
- 7. Quali sono le differenze tra RedrawWindow e UpdateWindow in Win32?
- 8. Quali sono le differenze tra evento e segnale in Qt
- 9. Quali sono le differenze tra Int e Integer in Scala?
- 10. Quali sono le differenze tra HasOne e References in Nhibernate?
- 11. Quali sono le differenze in JIT tra Java e .Net
- 12. Quali sono le differenze tra hostAttributes e proprietà in polimero?
- 13. Quali sono le differenze tra osservabili e promesse in JavaScript?
- 14. Quali sono le differenze tra ConcurrentQueue e BlockingCollection in .Net?
- 15. Quali sono le differenze tra funzioni e metodi in Swift?
- 16. Quali sono le differenze tra INSERT e UPDATE in MySQL?
- 17. Quali sono le differenze tra ADOdb e PDO in PHP?
- 18. Quali sono le differenze tra le classi Helper e Utility?
- 19. Quali sono le differenze tra XmlSerializer e BinaryFormatter
- 20. quali sono le principali differenze tra fwrite e write?
- 21. Quali sono le differenze tra JSP e Facelets?
- 22. Quali sono le differenze tra struct_time e datetime?
- 23. Quali sono le differenze tra OllyDbg e WinDbg?
- 24. Quali sono le principali differenze tra AngularJS e ReactJS
- 25. Quali sono le differenze tra un compilatore e un linker?
- 26. Quali sono le differenze tra MPI e OpenMP?
- 27. Quali sono le differenze pratiche tra forme speciali e macro?
- 28. Quali sono le differenze tra l'oggetto JSON e JavaScript?
- 29. Quali sono le differenze tra display: box e display: flexbox
- 30. Quali sono le differenze tra R.styleable, R.style e R.attr?
Leggere e leggere binario http://c-faq.com/stdio/textvsbinary.html – Terrance