PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unix: Link oder Datei ?


neo
06.09.2002, 17:59
Hallo,

wie kann man ermitteln ob eine Datei wirklich eine Datei ist, oder ein Link auf eine andere Datei.

Keiner meiner Versuche hat bisher zum Erfolg geführt.
Vielleicht kann mir da jemand helfen. Vielen Dank.

MfG Neo


MrEasy
06.09.2002, 18:45
es gibt ja 2 arten von links: hardlinks und softlinks
hardlinks sind quasi "die datei", ohne hardlink existiert eine datei nicht

softlinks kannste über die attribute erkennen, da hat ein softlink, afaik ein l (el) an erster stelle

neo
06.09.2002, 20:31
Hallo MrEasy,

danke für die schnelle Antwort.

Allerdings weiß ich nicht wie man die Attribute mit C auswerten
kann. In PHP gibt es eine Funktion fileperms() die die Berechtigung
zurückgibt. In C habe ich etwas ähnliches aber noch nicht gefunden.

Wie bekommt man den den Dateinamen der Datei auf den der Softlink zeigt?

MfG Neo

lobo
06.09.2002, 21:25
Hi,

hier hab ich dir ein Beispiel, aber den Code nicht zu genau anschauen, bin kein C-Guru ;)

Gruss

lobo


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>

#define MAXBUFFER 255

int main(int argc, char **argv)
{
char buffer[MAXBUFFER] = {0};
struct stat attr;

if(argc < 1)
exit(EXIT_FAILURE);

/* schreibt dateiattribute in struktur variable*/
if(lstat(argv[1], &attr) == -1)
exit(EXIT_FAILURE);

/* testen ob datei ein symlink ist */
if(!S_ISLNK(attr.st_mode)) {
printf("Datei ist kein symlink!\n");
exit(EXIT_FAILURE);
}

/* verweis auf datei auslesen */
if((readlink(argv[1],buffer,MAXBUFFER - 1)) == -1)
exit(EXIT_FAILURE);

printf("symlink zeigt auf: %s\n",buffer);

return(EXIT_SUCCESS);
}

neo
09.09.2002, 20:20
Hallo,

danke, ich denke genau das habe ich gesucht. Ich probiers aus sobald ich wieder an einem Unix-Redchner sitze.

MfG Neo