即使链接了更多文件,fstat()st_nlink = 1也是如此

时间:2012-11-21 05:56:39

标签: c system-calls fstat

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char const *argv[])
{
    struct stat buf;
    int fd;

    if (fd = open(argv[1], O_RDWR | O_CREAT)<0)
    {
        printf("file open error\n");
        return 1;
    }
    if (link(argv[1], "link1") + link(argv[1], "link2")<0)
    {
        printf("error link\n");
        return 1;
    }
    if (fstat(fd, &buf)<0)
    {
        printf("error fstat\n");
        return 1;
    }
    printf("nlinks before = %d \n", buf.st_nlink);
    if (unlink("link2") + unlink("link1") + unlink(argv[1])<0)
    {
        printf("unlink error\n");
        return 1;
    }
    if (fstat(fd, &buf)<0)
    {
        printf("error fstat\n");
        return 1;
    }
    printf("nlinks after = %d \n", buf.st_nlink);
    return 0;
}

输出:     在= 1之前的nlinks     在= 1之后的nlinks

为什么st_nlink总是= 1,即使该文件至少有3个链接? 另外,如果我使用lstat代替我获得3个st_nlinks。为什么呢?

1 个答案:

答案 0 :(得分:5)

if (fd = open(argv[1], O_RDWR | O_CREAT)<0)

应该是:

if ( (fd = open(argv[1], O_RDWR | O_CREAT))<0) 

<的{​​{3}}高于=