Huis Persoonlijke financiën C Programmeren: toegang verkrijgen tot bestanden opgeslagen in willekeurige opslag - dummies

C Programmeren: toegang verkrijgen tot bestanden opgeslagen in willekeurige opslag - dummies

Inhoudsopgave:

Video: How old school cassette tape drives worked 2024

Video: How old school cassette tape drives worked 2024
Anonim

Willekeurige bestandstoegang in C-programmering heeft niets te maken met willekeurige getallen. Integendeel, het bestand kan op elk punt her en der, en zelfs yon worden geraadpleegd. Dit type toegang werkt het beste wanneer het bestand is gestippeld met records van dezelfde grootte. Het begrip records roept structuren op die gemakkelijk naar een bestand kunnen worden geschreven en vervolgens afzonderlijk, selectief of allemaal tegelijk kunnen worden teruggehaald.

Terwijl uw programma de gegevens van een bestand leest, houdt het de positie bij van waaruit gegevens in het bestand worden gelezen. Een cursorpositie wordt behouden, zodat de locatie waar de code in een bestand leest of schrijft, niet verloren gaat.

Wanneer u een bestand voor het eerst opent, bevindt de cursorpositie zich aan het begin van het bestand, de eerste byte. Als u een record van 40 bytes in het geheugen leest, is de cursorpositie vanaf het begin 40 bytes. Als u leest tot het einde van het bestand, behoudt de cursorpositie die locatie ook.

Om de zaken verwarrend te houden, wordt de cursorpositie vaak een -bestandwijzer , genoemd, ook al is dit geen aanwijzervariabele of een BESTAND type aanwijzer. Het is gewoon de locatie binnen een bestand waar de volgende byte aan gegevens wordt gelezen.

U kunt rotzooien met de cursorpositie door verschillende interessante functies in C te gebruiken. Twee ervan zijn ftell () en rewind (). De functie ftell () retourneert de huidige cursorpositie die is gecompenseerd als een lange int-waarde. De functie rewind () verplaatst de cursor terug naar het begin van het bestand.

De while-lus in Tell en Rewind leest in records van de binding. DB-bestand. Op regel 28 retourneert de functie ftell () de cursorpositie. Als het groter is dan één invoer (wat betekent dat de tweede invoer is gelezen), wordt de cursorpositie teruggezet naar het begin van het bestand door de functie rewind () op regel 29.

TELLEN EN TERUGSPOELEN

# include # include #include int main () {struct entry {char actor [32]; int jaar; char title [32];}; struct entry obligatie; BESTAND * a007; int count = 0; a007 = fopen ("bond. db", "r"); if (! a007) {puts ("SPELER wint!"); exit (1);} while (fread (& bond, sizeof (struct entry), 1, a007)) {printf ("% st% dt% sn", obligatieacteur, obligatiejaar, obligatietitel); if (ftell (a007)> sizeof (struct entry)) rewind (a007); tel ++; als (aantal> 10) pauze;} fclose (a007); return (0);}

Om de juiste offset te bepalen, vergelijkt een if-statement het resultaat van de ftell () -functie en sizeof-operator op de structuurinvoer. Houd er rekening mee dat ftell () alleen een lange int-waarde retourneert, niet een specifiek aantal structuren.

De variabele telling, gedeclareerd en geïnitialiseerd op regel 14, houdt bij hoe vaak de while-lus wordt herhaald. Als dit niet het geval was, zou het programma eindeloos doorlopen. Dat is slecht. Dus wanneer de waarde van de telling groter is dan 10, breekt de lus en wordt het bestand gesloten en eindigt het programma.

Oefening 1 : Typ de broncode van Tell and Rewind in uw editor. Build en run om te zien hoe de ftell () en rewind () functies werken.

Een specifiek record zoeken

Wanneer een bestand alle dezelfde grootte bevat, kunt u de functie fseek () gebruiken om elk afzonderlijk item uit te pluizen. Het formaat voor fseek () is

fseek (handle, offset, whence);

handle is een bestandsingreep, een BESTAND-aanwijzer die een bestand vertegenwoordigt dat geopend is voor lezen. offset is het aantal bytes vanaf de begin-, eind- of huidige positie in een bestand. En wherece is een van de drie constanten: SEEK_SET, SEEK_CUR of SEEK_END voor respectievelijk het begin, de huidige positie of het einde van een bestand.

Zolang uw bestand records van een constante grootte bevat, kunt u fseek () gebruiken om een ​​specifiek record uit te pluizen, zoals weergegeven in Een specifiek record in een bestand zoeken.

VIND EEN SPECIFIEK RECORD IN EEN BESTAND

# include # include # include int main () {struct entry {char actor [32]; int jaar; char title [32];}; struct entry obligatie; BESTAND * a007; a007 = fopen ("bond. db", "r"); if (! a007) {puts ("SPELER wint!"); exit (1);} fseek (a007, sizeof (struct entry) * 1, SEEK_SET); fread (& bond, sizeof (struct entry), 1, a007); printf ("% st% dt% sn", obligatieacteur, obligatiejaar, obligatie titel); fclose (A007); return (0);}

De code die wordt weergegeven in Een specifiek record in een bestand zoeken is weer redelijk vergelijkbaar met de code die wordt getoond in listing 22-9. De grote toevoeging is de functie fseek (), weergegeven op regel 21. Deze stelt de cursorpositie zo in dat de fread () -functie die volgt (zie regel 22) een specifiek record binnen de database leest.

Op regel 21 onderzoekt de functie fseek () het bestand dat wordt vertegenwoordigd door handle a007. De offset wordt berekend door de grootte van de ingangsstructuur te vermenigvuldigen.

Net als bij een array levert het vermenigvuldigen van die grootte met 1 de seconde record op in het bestand; vermenigvuldig de waarde met 0 (of geef 0 op in de functie) om de eerste record te lezen. De constante SEEK_SET zorgt ervoor dat fseek () vanaf het begin van het bestand begint te kijken.

Het netto-effect van de code is dat het tweede record in de obligatie. DB-bestand wordt weergegeven.

Oefening 2: Typ de broncode in Zoek een specifiek record in een bestand. Bouw en voer uit om het tweede record in het bestand te zien.

C Programmeren: toegang verkrijgen tot bestanden opgeslagen in willekeurige opslag - dummies

Bewerkers keuze

Tien Helpbronnen voor Junos OS - dummies

Tien Helpbronnen voor Junos OS - dummies

Dit is een top-tien lijst met bronnen die u moet zoeken meer informatie over softwarebewerkingen, training en ondersteuning voor Junos - alle extra details die u mogelijk nodig heeft om Junos OS te kunnen configureren en bedienen in uw eigen netwerkimplementaties. CLI Help-commando's Bent u op zoek naar meer achtergrondinformatie over hoe een bepaalde functie ...

De functie van de drie vlakken van Junos netwerk OS - dummies

De functie van de drie vlakken van Junos netwerk OS - dummies

De architectuur van de Junos opererende systeem verdeelt de functies van besturing, services en doorsturen op verschillende niveaus. Elk van de vlakken van Junos OS biedt een kritieke set van functionaliteit in de werking van het netwerk. Besturingsvlak van het Junos-netwerkbesturingssysteem (NOS) Alle functies van het besturingsvlak lopen op ...

De basisprincipes van BGP-routebealing - dummy's

De basisprincipes van BGP-routebealing - dummy's

Het configureren van Border Gateway Protocol (BGP) kan nogal lastig zijn, vooral met grote aantallen peersessies die handmatig moeten worden geconfigureerd. In feite kan in een groot netwerk de full-mesh-vereiste voor IBGP een provisioning-nachtmerrie zijn. BGP's antwoord op de IBGP-paring-configuratie-nachtmerrie die het volledige maaswerk is, wordt routeberefening genoemd. Route ...

Bewerkers keuze

Noodzakelijke elementen voor SEO om hoge trefwoorden te krijgen - dummies

Noodzakelijke elementen voor SEO om hoge trefwoorden te krijgen - dummies

Als de allerbeste locatie op het web staat op de pagina een van de zoekmachines, je moet de SEO-elementen kennen die je daar kunnen brengen. Een goede plek om te beginnen is met zoekwoorden. Zoekmachines gebruiken geavanceerde processen om zoekwoordgebruik en andere factoren te categoriseren en analyseren om erachter te komen ...

Persberichten als bron van SEO-inhoud - dummies

Persberichten als bron van SEO-inhoud - dummies

Het leuke aan persberichten is dat u ze zonder toestemming op uw website kunt gebruiken, en sommige zullen al voor de zoekmachine zijn geoptimaliseerd. Het doel van een persbericht is om het uit te sturen en te zien wie het ophaalt. U hoeft geen contact op te nemen met de eigenaar van het persbericht, omdat ...

Kies een domeinnaam die geoptimaliseerd is voor zoekmachines - dummies

Kies een domeinnaam die geoptimaliseerd is voor zoekmachines - dummies

Zelfs de domeinnaam van uw site moet geoptimaliseerd voor zoekmachines. Zoekmachines lezen uniforme resource locators (URL's), op zoek naar sleutelwoorden erin. Bijvoorbeeld als u een website heeft met de domeinnaam knaagdierracen. com en iemand zoekt Google op knaagdierenraces, Google ziet rodent-racing als een wedstrijd; omdat er een streepje verschijnt tussen de twee ...

Bewerkers keuze

Praxis Elementair onderwijs Examen-Economie - dummies

Praxis Elementair onderwijs Examen-Economie - dummies

U zult enkele basisconcepten van de economie voor de Praxis moeten kennen Elementair onderwijs examen. Elementaire economie onderzoekt de wens voor, de productie van en de verkoop en het gebruik van geld, zowel lokaal als wereldwijd. Het onderwijzen van economie omvat concepten zoals behoeften versus behoeften, kosten en meer tot nadenken stemmende onderwerpen, zoals de volgende: ...

Praxis Elementair onderwijs voor Dummy's Cheat Sheet - dummies

Praxis Elementair onderwijs voor Dummy's Cheat Sheet - dummies

Het Praxis basisonderwijs: Curriculum, instructie en beoordeling examen (5017) bestrijkt een breed scala van wat u moet weten over basisonderwijs. Als u het Praxis Elementary Education: Content Knowledge-examen (5018) neemt, moet u zich ervan bewust zijn dat het de dekking beperkt tot de inhoud van de vier hoofdonderwerpen die een elementaire leraar is ...

Praxis Core For Dummies Cheat Sheet - dummies

Praxis Core For Dummies Cheat Sheet - dummies

Voordat je te opgewonden raakt, begrijp dat de informatie die volgt niet klopt eigenlijk niet over het bedriegen van de Praxis. Het gaat echt meer om de meest efficiënte manieren om je voor te bereiden op het examen. Maar "voorbereidingsblad" heeft niet helemaal dezelfde reden. Trouwens, vals spelen is niet nodig als je weet wat je aan het doen bent, en ...