ReadLink C -funksjon

ReadLink C -funksjon

C -programmeringsspråkets ReadLink () -funksjon brukes til å sette inn informasjonen om den symbolske lenken, som refererer til en eller annen bane, inn i bufferen. Å lese innholdet i en symbolsk lenke blir referert til som "Reading a Link" eller "Readlink". Det gjenværende innholdet i bufferen blir ikke bestemt hvis den symbolske lenkenes lengde på byte er mindre enn buffer_størrelse. I denne artikkelen vil vi diskutere noen eksempler for å illustrere arbeidet med Readlink C -funksjonen i Kali Linux -systemet. Syntaksen til ReadLink -funksjonen er gitt som følger:

ReadLink () -funksjonen finnes i overskriftsfilen . Denne overskriftsfilen må inkluderes over hovedfunksjonen i kodefilen. Bufferen inneholder ikke en null -tegn etter resultatet.

#inkludere
  • ssize_t readlink (const char *begrens lenke_banenavn, char *begrenser buffer,
      • størrelse_t buffer størrelse);

Den symbolske lenkenes verdi er forkortet for å passe inn i bufferen hvis den er for kort til å holde den i sin helhet (buffer_størrelse). Den opprinnelige bufferstørrelsesbyte må legges til bufferen i tilfelle bufferargumentet ikke er stort nok til å holde koblingsinnholdet. Hvis bufferstørrelsen er større enn størrelse maks, er utfallet implementeringsdefinert. Antall byte lastet i bufferen vil bli returnert hvis ReadLink () blir utført med hell. Ellers må den returnere -1 og stille feil for å identifisere den nøyaktige feilen og la bufferen være umodifisert. Her er listen over beskrivelser av feil sammen med koden:

  • Einval: Det er ingen symbolsk lenke i den navngitte filen.
  • EIO: Lesing fra filsystemet resulterte i en inngangs- eller utgangsfeil.
  • Eacces: Et element i Path -prefikset har ikke søketillatelse.
  • Eloop: I symbolske koblinger er det en sløyfe. Når du løser bane -argumentet, blir denne feilen reist hvis det blir funnet mer enn Posix Symloop Symbolic Links.
  • Enoent: Det er ingen en slik fil som den navngitte lenken.

La oss evaluere readlink () -funksjonen i noen eksempler. Lag en C -programmeringsfil i Linux -terminalen ved hjelp av VIM Editor. Du kan bruke Nano eller hvilken som helst annen redigerer for å opprette filen.

Alle overskriftsfilene er inkludert i koden nedenfor før hovedfunksjonen. I den første linjen i hovedblokken er strukturen "stat" erklært. Etter det er en peker av karaktertypen erklært, som senere brukes i Readlink () -funksjonen. Vi bruker ssize_t i stedet for en heltalldatatype. Det er en signert type. Maksimumsverdiene deres er bundet til om operativsystemet er 32-bit eller 64-bit. Vi har erklært to variabler av denne datatypen: buffer_størrelse og nbytes (antall byte).

I den neste kodelinjen sjekket vi antall argumenter som leveres fra kommandolinjen til hovedfunksjonen. Hvis dette ikke er lik 2, går programmet ut fra hovedfunksjonen ved å bruke utgangsfunksjonen, som også viser en feilmelding. Minnested. Hvis filnavnet er den symbolske lenken, returnerer denne funksjonen detaljene om selve symbolsk lenken. Informasjonen som er returnert av LSTAT -funksjonen er i form av en statsstruktur, som refereres til av en buffer.

Statusdata for en viss fil blir samlet inn av LSTAT () -funksjonen og plasseres i minneadressen som er pekt på av bufferen. Denne metoden leverer informasjon om selve symbolsk lenken hvis filnavnet er den symbolske lenken. Dataene som LSTAT -funksjonen returnerer er i form av en statsstruktur. Vi har økt bufferstørrelsen med en.

I noen tilfeller er den rapporterte størrelsen null, returnert av den symbolske lenken. I den situasjonen, sett bufferstørrelsen til Path_max -verdien. Angi bufferen ved hjelp av minnetildeling, som bruker buffer_størrelse. Sjekk om bufferen er null, og vis en feilmelding. Ring readlink -funksjonen og pass banen til lesekoblingen, buffer og buffer_størrelse til denne funksjonen. Funksjonen returnerer hvor mange byte som ble returnert i banen. Hvis antallet byte er -1, kan du vise feilen, ellers vise punktets plassering av den koblede filen. Deretter frigjør bufferen.

Sett sammen C -filen ved hjelp av GCC -kompilatoren. Readlink.ut -filen inneholder resultatet av filen.

I den første utførelsen passerer den katalognavnet, som ikke er den symbolske lenken, så det gir en feil at det ikke er noen slik fil eller katalog.

Nedenfor passerte vi rotkatalogen, som er et ugyldig argument.

Nå som vi har passert banen, returnerer Readlink -funksjonen navnet på den symbolske lenken som den peker.

La oss bruke en C -fil til å konstruere en fil og en symbolsk lenke til den. Vi har opprettet et filnavn og en symbolsk lenke i hovedfunksjonen. Opprett filen med S Iwuser -bryteren ved hjelp av CREATE -funksjonen. En ny hard lenke kan lages til en eksisterende fil ved hjelp av C -bibliotekets link () -metode. For å bygge en myk lenke, bruk Symlink () -metoden. Det vil ikke bli overskrevet hvis lenkefilen eller banen allerede eksisterer. Når du lykkes, returnerer funksjonene lenker () og symlink () begge returnerer 0.

Bruk GCC -kompilatoren til å kompilere koden, og lagre resultatene i ReadLink1.ut fil.

Utfør koden. Her er utgangen:

Konklusjon:

Dette handler om bruken av ReadLink () -funksjonen til C i noen av eksemplene som er implementert på Kali Linux -systemet. Vi har utdypet bruken, dens syntaks og feilene den inneholder i noen av eksemplene for å være mer spesifikke og tydeligere.