How do you determine using stat() whether a file is a symbolic link?

Posted by hora on Stack Overflow See other posts from Stack Overflow or by hora
Published on 2010-04-14T08:34:26Z Indexed on 2010/04/14 8:43 UTC
Read the original article Hit count: 230

Filed under:
|
|
|

I basically have to write a clone of the UNIX ls command for a class, and I've got almost everything working. One thing I can't seem to figure out how to do is check whether a file is a symbolic link or not. From the man page for stat(), I see that there is a mode_t value defined, S_IFLNK.

This is how I'm trying to check whether a file is a sym-link, with no luck (note, stbuf is the buffer that stat() returned the inode data into):

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;
}

My code ALWAYS prints this is not a link even if it is, and I know for a fact that the said file is a symbolic link since the actual ls command says so, plus I created the sym-link...

Can anyone spot what I may be doing wrong? Thanks for the help!

© Stack Overflow or respective owner

Related posts about c

    Related posts about inode