c - 即使链接更多文件后,fstat() st_nlink=1

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

输出: 之前的 n 个链接 = 1 = 1 之后的 nlinks

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

最佳答案

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

应该是:

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

<具有更高的precedence= .

关于c - 即使链接更多文件后,fstat() st_nlink=1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13487240/

相关文章:

c++ - C/C++ 套接字编程 - 没有可用的源代码 "ntdll!KiFastSystemCallRet()"

python - "Can' t 不同大小 vector 值之间的转换"

linux-kernel - 系统调用 Hook 问题

linux - 实现用于重启的 linux 系统调用

c - Linux 中系统调用的返回值大小或类型

c++ - 函数main(int argc, char *argv[])中的参数argv

c - 尝试让 UART 在 dsPIC33EV256GM102 上工作

c - 使用 fstat() 与 stat() 相比有什么优势?

c - fstat() 返回 0,文件大小为 0,错误号为 11