ein Kapitel zurück                                           ein Kapitel weiter

Mit der Funktion.....

#inlcude <unistd.h>

int link(const char *name, const char *linkname); 

....erzeugen wir einen HARD-Link auf eine existierende Datei. (Falls sie sich mit Hard- bzw. Symbolische Links unter Linux/Unix nicht auskennen sollten sie sich zuerst folgendes Kapitel ansehen : 'Interna eines Dateisystems' zum Verständnis diese Kapitels.) Es wird also ein Hardlink Namen linkname der auf existierende Datei name zeigt erzeugt. Wenn der Linkname bereits existiert kann dieser nicht erzeugt werden. Bei Fehler gibt diese Funktion -1 zurück ansonsten 0.

Hier nun ein kurzes Beispiel wie sie Hardlinks erzeugen können.......

/*Download:hlink.c*/
#include <stdio.h> #include <unistd.h> int main(int argc, char **argv) { if(argc!=3) { fprintf(stderr,"Eingabe : %s programmname linkname\n",*argv); exit(0); } if((link(argv[1],argv[2])) == -1) { fprintf(stderr,"Konnte keinen Hardlink Namens %s für die Datei %s erstellen\n",argv[2],argv[1]); exit(0); } printf("Hardlink Namens %s für %s erzeugt\n",argv[2],argv[1]); return 0; }

Es muss übrigens auch dazu erwähnt werden das nur der Superuser Links auf Directorys legen darf. So wird vermieden das sich unendliche Rekursionen ergeben bei denen immer wieder ein Directory auf sich selbst zeigt.

Bevor wir zu symbolischen Links kommen folgt hier ein kleiner Überblick welche Funktionen überhaupt symbolische Links folgen und welche sich auf den Symbolischen Link selbst beziehen.

Bezieht sich auf symbolischen Links : lchown,lstat, readlink,remove,rename,unlink,chown

Folgt symbolische Links access,chdir,chmod,creat,exec,link,mkdir,mkfifo,mknod, open, opendir, pathconf, stat truncate

Einen symbolischen Link können wir mit der Funktion...



#include <unistd.h>

int symlink(const char *ziel, const char *symbollink);

Der Name symbollink (symbolischer Link) zeigt auf die Datei mit dem Namen ziel. symbollink und ziel müssen sich nicht im gleichen Filesystem befinden. Auch hier gibt die Funktion bei Erfolg 0 und bei Fehler -1 zurück.

Hier ein Beispiel zum anlegen eines symbolischen Links....

/*Download:slink.c*/
#include <stdio.h> #include <unistd.h> int main(int argc, char **argv) { if(argc!=3) { fprintf(stderr,"Eingabe : %s programmname linkname\n",*argv); exit(0); } if((symlink(argv[1],argv[2])) == -1) { fprintf(stderr,"Konnte keinen symb.Link erstellen\n"); exit(0); } printf("Symb.Link Namens %s für %s erzeugt\n",argv[2],argv[1]); return 0; }

Ich benutze z.B. oft den Hexeditor vom KDE arbeite aber viel mit der Konsole in meinem /home - Verzeichnis. Wenn ich den Hexeditor starten muss, müsste ich entweder mit der Maus anklicken oder in der Konsole folgende Eingabe machen....

/opt/kde/bin/khexdit

...oder aber ich lege mir in meinem /home - Verzeichnis ein symbolischen Link an. Ich führe dazu das Programm oben aus mittels....

slink /opt/kde/bin/khexdit kx

Wir gehen jetzt mal davon aus das unser Programm 'slink' heißt. Nun kann ich meinen Hexeditor schnell und beqeum mit der Eingabe...

kx

...starten. Kommen wir nun zur Funktion mit der es möglich ist den Namen zu erfragen worauf der symbolische Link zeigt...

#inlcude <unistd.h>

int readlink(const char *symbollink, char *puffer, int puffergroesse);

Die Funktion liefert die Anzahl der gelesenen Bytes des Pfadnamens auf dem das symbollink zeigt zurück. In puffer wird der Name des Pfadname geschrieben und die puffergroesse ist die Anzahl der Bytes die sie in puffer schreiben können.

Achtung: Der Name der Zieldatei wird nicht Terminiert ('\0'). Da uns die Funktion aber die Anzahl der gelesenen Bytes zurückliefert dürfte diese kein Problem sein. Hierzu nun ein Beispiel.....

/*Download:slink.c*/
#include <stdio.h> #include <unistd.h> int main(int argc, char **argv) { if(argc!=3) { fprintf(stderr,"Eingabe : %s programmname linkname\n",*argv); exit(0); } if((symlink(argv[1],argv[2])) == -1) { fprintf(stderr,"Konnte keinen symb.Link erstellen\n"); exit(0); } printf("Symb.Link Namens %s für %s erzeugt\n",argv[2],argv[1]); return 0; }

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf