Temel olarak bir sınıf için UNIX ls komutunun bir kopyasını yazmam gerekiyor ve neredeyse her şey çalışıyor. Nasıl yapılacağını anlayamadığım bir şey, bir dosyanın sembolik bir bağlantı olup olmadığını kontrol etmektir. stat()
için man sayfasından, mode_t
değeri tanımlanmış, S_IFLNK
olduğunu görüyorum.Stat() işlevinin bir dosyanın sembolik bir bağlantı olup olmadığını nasıl belirliyorsunuz?
switch(stbuf.st_mode & S_IFMT){
case S_IFLNK:
printf("this is a link\n");
break;
case S_IFREG:
printf("this is not a link\n");
break;
}
Kodum:
Bu benim bir dosya, bir sym-link hiçbir şans ile olup olmadığını kontrol etmek çalışıyorum nasıl (not, stbuf stat()
içine inode verilerini döndüğünü tampon) HER ZAMAN olsa bile this is not a link
yazdırır ve ben gerçek ls komutu öyle diyor beri söz konusu dosya sembolik bir bağlantı olduğunu biliyorum, artı ben sym-link yarattı ...
Ben ne yapabilirim yanlış mı yapıyorsun? Yardım için teşekkürler!
Benim durumumdan alıntı (2) manpage: lstat(), stat() ile aynıdır, ancak yolun sembolik bir bağ olması durumunda, bağlantının kendisi başvurulan dosya değil, kendisidir. – Philip