chtěl bych se zeptat, jak fungují soubory v PC. Mám jakousi představu, ale chtěl bych vědět, zda je tomu opravdu tak.
Soubory jsou reprezentovány n bajty, kde na konci je ukončovací znak pro soubor?
U binárního souboru je jedno, jak si data reprezentuji, stačí když si na zvolenou reprezentaci dat napíšu program
Při otevření soubory (např. fopen, popř. práce s ifstreamem a jejím open) se postaví ukazatel na začátek souboru
Ukazatel v souboru - ten je umístěn v paměti a pracuje s ním jen OS, já k němu jen přistupuji pomocí načítání (takže v textových souborech po znacích / řádcích, v binárních po N bajtech?)
Když přečtu bajt z binárního souboru (přes ifstream a get(char)) jeho hodnotu (jako číslo) vezmu přetypováním?
Sposob akym je subor ulozeny zavysi od file systemu a hw. Su tu systmove volania ktore umoznuju jednotny pristup k suborom napr pomocou file descriptorov(v linuxe). Standart c/c++ vytvara skupinu funkcii (stdio, iostream, ....) ktore pracuju zo subormi a pridavaju bufferovanie. Dalej tu mas binarny a textovy mod pristupu k suborom. Binarny zapisuje/cita data presne tak ako zadavas, textovy moze niektore data pred zapisom/citanim upravovat.
Nahlásit jako SPAM
IP: 178.143.60.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
V C/C++ je soubor abstraktizován na proud dat (podobně jako standardní vstup - také se jedná o proud dat). Realizace je pak vždy jednak OS, tak i HW závislá.
Nahlásit jako SPAM
IP: 85.160.38.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
A ještě k tomu ukazateli, kde jsem v souboru (když přečtu bajt, tak potom čtu následující bajt, nikoliv ten samý) - takže si filesystem implementuje takový ukazatel v paměti, kde ukazuje na bajt, co se bude číst?
Data sa ukladaju na disk vecsinou v blokoch. Tieto bloky nemusia nasledovat za sebou (tiez je to zalezitost FS). Dalej napr taky sw v ssd si tie data aj tak ulozi podla seba. "Pointer" na block asi bude existovat, ale na konkretny znak asi nie.
Nahlásit jako SPAM
IP: 178.143.60.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Jasně, ale tak data se z disku natáhnout blíž CPU (tedy do RAM) a odtamtud se tahají dál? A jelikož si můžu načíst N bajtů, počkat a zase načítat N bajtů, tak musí být nějaký způsob, jak se to umístění (co se bude nově tahat) bude ukládat?
#8Šťouchal
To nejde říci obecně. Záleží na platformě. Do bufferu se načte tolik dat, kolik je pro OS momentálně výhodné (např. právě jeden blok - ale nemusí tomu být tak. Např. knihovna FATFS pro různé mikroprocesory dovoluje nastavit kolik dat se má bufferovat - standardně je však bufferování vypnuté (aby se neplýtvalo na MCU s RAM)).
Nahlásit jako SPAM
IP: 85.160.38.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv