Fstat-functie in C

Fstat Functie In C



De functie fstat() roept het systeem aan om de informatie (met betrekking tot een bestand) te retourneren die afhankelijk is van de descriptor van dat bestand. Deze functie verkrijgt de informatie voor het bestand dat is gekoppeld aan de bestandsdescriptor, ook wel 'fildes' genoemd, en schrijft deze informatie vervolgens naar de geheugenlocatie waar de buffer naar verwijst. Het retourtype van deze functie is een geheel getal. Het retourneert de waarde '0' als het programma met succes is uitgevoerd. Anders retourneert het een '-1' naar de functie in het geval van een mislukte uitvoering. De uitvoeringsfout voor deze functie kan te wijten zijn aan een aantal specifieke redenen, zoals als de fildes van de functie een ongeldige descriptor voor het bestand hebben, als de leesfout voor invoer en uitvoer vanuit het bestand optreedt, en als de geheugenlocatie (structuur) waar de buffer wijst naar het schrijven van de bestandsinformatie heeft niet genoeg toegewezen geheugen voor de bestandsgrootte.

Procedure

Dit artikel volgt de sequentiële volgorde om de functie fstat() te implementeren om de bestandsinformatie op te halen. We leren eerst de syntaxis voor deze functie, de parameters die nodig zijn voor deze functie. Vervolgens gebruiken we deze syntaxis om enkele voorbeelden voor de functie fstat() uit te voeren.







Syntaxis

De methode om de functie fstat() te declareren die de toegang van het programma tot de bestandsinformatie mogelijk maakt, wordt vermeld in de volgende regel:



$ #include
$ int staat ( int fildes , structureren stat * buf ) ;

Telkens wanneer we de functie in ons programma moeten aanroepen, moeten we eerst de header-bestanden importeren die deze functie ondersteunen als 'sys/stat.h'. Het retourtype voor de functie is altijd 'int' en de parameter bevat 'fildes' met het gegevenstype 'int'. Fildes is een descriptor voor het bestand waarvan we de informatie willen weten. Een andere parameter die aan de functie wordt gegeven, is de aanwijzer 'buf'. Het is een 'struct stat' -aanwijzer die verwijst naar de structuur waar we de gegevens over het bestand willen opslaan. Dit is een korte beschrijving van de invoerparameters voor de functie fstat().



Voorbeeld

We gebruiken de eerder genoemde beschrijving en voeren een programma uit om de informatie over elk / specifiek bestand via ons programma te krijgen. We schrijven dit programma in de Microsoft Visual Studio C-compiler voor de uitvoering. We beginnen met het voorbeeld door eerst een project te maken en dit vervolgens toe te voegen aan de C-opslagplaatsen in Visual Studio. Om het project aan de C-bestanden toe te voegen, nemen we de '.c' op bij de projectnaam en voegen deze toe aan het bronbestand van het project. De volgende stap na het maken van het project is het aanroepen van alle benodigde bibliotheken voor de functies die we later in het programma kunnen gebruiken. Aangezien we het voorbeeld voor de functie fstat() in dit artikel implementeren, moeten we het headerbestand 'sys/stat.h' opnemen. Voor de bestandsinformatie moeten we het apparaattype weten waar het bestand bestaat. Om het gegevenstype voor het apparaat te weten, nemen we de kop 'type. h' in het programma.





De bestandsinformatie moet het tijdstip bevatten waarop het bestand voor het laatst is geopend en de wijziging die erin is aangebracht. Om toegang te krijgen tot deze tijdoproepfuncties, voegen we het headerbestand 'times. h' en de 'fcntl. h” header voor de bestandspermissiefuncties. De laatste kop “stdio. h”-bestand is ook in het programma opgenomen om de methoden printf() en scanf() in het programma aan te roepen. De header-bestanden die we hebben besproken om in het programma te worden opgenomen, zijn als volgt:

$ #include
$ #include
$ #include
$ #include
$ #include

Nadat de eerder genoemde headerbestanden met succes in het programma zijn geïmporteerd, bouwen we nu het programma om de informatie over een specifiek bestand te krijgen. We declareren de functie met het retourtype 'int' met de naam 'main'. In deze hoofdfunctie declareren we een 'char' -array en wijzen deze de naam toe van het bestand waarvoor we informatie nodig hebben. Vervolgens definiëren we een 'stat-informatie' met het gegevenstype 'struct'. Deze structuur is een plaats waar we de informatie over het bestand opslaan.



Vervolgens definiëren we een andere variabele met de naam 'file_descriptor' met het gegevenstype als 'integer'. In de 'if-voorwaarde' vragen we toestemming voor de lees- en schrijfbewerkingen voor het bestand als het bestaat, waarbij de 'S_IWUSR' en de naam van de array worden doorgegeven aan de functie 'create()' die de machtigingen voor het bestand aanroept als het bestaat of maak anders een nieuw bestand aan. We geven deze functie create() door aan de 'if condition' die stelt dat als de waarde van de functie create() kleiner is dan nul, dan ontstaat er een fout dat het bestand moet worden aangemaakt. Als fstat() met parameters als 'file_descriptor' en 'information' en 'het adres van de locatie waar de bestandsinformatie is opgeslagen' niet gelijk is aan nul, geven we de fstat() geretourneerde waarde weer die de informatie van het bestand is . En we printen de informatie in de vorm van attributen, b.v. apparaat-ID waarin het bestand is opgeslagen, het Inode-nummer van het apparaat, de beveiligingsmodus van het bestand, de gebruikers-ID, de groeps-ID en het nummer van de link (harde vorm).

Nadat we deze attributen hebben weergegeven, komen we uit de instructies en sluiten we het bestand met de methode close(). Ontkoppel vervolgens het bestand door de methode unlink() aan te roepen.

#include
#include
#include
#include
#include

hoofd ( ) {
char reeks [ ] = 'amp.bestand' ;
structureren stat informatie ;
int bestandsdescriptor ;
als ( ( bestandsdescriptor = gemaakt ( reeks , S_IWUSR ) ) < 0 )
perror ( 'creat() fout' ) ;
anders {
als ( staat ( bestandsdescriptor , & informatie ) != 0 )
perror ( 'fstat() fout' ) ;
anders {
zet ( 'fstat() waarden:' ) ;
printf ( ' inode: %d \n ' , ( int ) informatie. st_ino ) ;
printf ( ' device_id: %d \n ' , ( int ) informatie. st_dev ) ;
printf ( ' modus van apparaat: %08x \n ' , informatie. st_mode ) ;
printf ( ' no_of_hard_links: %d \n ' , informatie. st_nlink ) ;
printf ( ' u_id: %d \n ' , ( int ) informatie. st_uid ) ;
printf ( ' g_id: %d \n ' , ( int ) informatie. st_gid ) ;
}
dichtbij ( bestandsdescriptor ) ;
ontkoppelen ( reeks ) ;
}
}

Het programma zal eerst toegang krijgen tot de toestemming voor de bestandsbewerking en vervolgens de gegevens erin lezen en naar de toegewezen geheugenlocatie schrijven. De attributen die we het programma hebben gegeven om uit het bestand weer te geven, worden weergegeven in de uitvoer.

Conclusie

We hebben de functie fstat() gebruikt om toegang te krijgen tot de bestandsinformatie. We leerden eerst de syntaxis voor de functie fstat() uitgelegd met de volledige beschrijving van de parameters van de functie. Vervolgens schreven we een programma voor deze functie waarbij we eerst toegang kregen tot de toestemming van onze bestandseigenaar en vervolgens het bestand lazen en de attributen weergaven die we wilden uit de informatie van het bestand. We hebben ons best gedaan om u het concept van fstat() te laten begrijpen en we hopen dat het u zou helpen bij uw programma's.