Mappa-link felismerése

 ( gg630504 | 2010. január 31., vasárnap - 22:08 )

Nem tudom megkülönböztetni a normál mappától.

Ubuntu
gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9)

Csináltam egy linket:
$ ls -l
lrwxrwxrwx 1 gg630504 gg630504 25 2010-01-31 20:39 Link erre: mappa -> /home/gg630504/test/mappa
drwxr-xr-x 2 gg630504 gg630504 4096 2010-01-31 20:38 mappa
-rwxr-xr-x 1 gg630504 gg630504 8532 2010-01-31 20:38 test
-rw-r--r-- 1 gg630504 gg630504 405 2010-01-31 20:38 test.c

És egy C programot:

#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
int main()
{
DIR * dir0;
struct dirent * de0;
struct stat st0;
de0 = readdir( dir0=opendir( "." ) );
while( de0 != NULL )
{
stat( de0->d_name, &st0 );
printf( "st_mode=%08o ", st0.st_mode );
printf( "S_ISLINK= %d ", S_ISLNK(st0.st_mode) );
printf( "%s\n", de0->d_name );
de0 = readdir( dir0 );
}
closedir( dir0 );
return( 0 );
}

gcc-vel lefordítottam, minden kapcsoló nélkül, futtattam, itt az eredménye:

st_mode=00040755 S_ISLINK= 0 ..
st_mode=00040755 S_ISLINK= 0 Link erre: mappa
st_mode=00100644 S_ISLINK= 0 test.c
st_mode=00040755 S_ISLINK= 0 mappa
st_mode=00040755 S_ISLINK= 0 .
st_mode=00100755 S_ISLINK= 0 test

A "Link erre: mappa" nem különbözik a "mappa"-tól.
Hogyan lehet mégis megkülönböztetni?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

lstat? Sima stat azt a file-t nézi, amire a link mutat, jelen esetben könyvtárat. lstat ugyanaz mint a stat, csak a linket nézi.

Kijavítottam lstat()-ra:
st_mode=00120777 S_ISLINK= 1 Link erre: mappa
st_mode=00040755 S_ISLINK= 0 mappa
Ez kellett, köszönöm!
(( Ott volt a man az orrom előtt. Mentségem nincs. ))
hg9ieg