#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/