今天根据stat这个函数写了ls -l的功能,测试时发现符号链接文件 l 不能被正确识别。
我创建了一个符号链接文件 10,指向普通文件1.c
stat 这个函数无法获取符号链接文件的属性,他获取的是该符号链接指向的文件。
问题就来了,struct buf 这个结构体里面 st_mode 的高4位表示文件类型,有符号链接这个文件类型。
测试代码:
头文件省略
int main (int argc, char* argv[])
{
struct stat buf;
stat(argv[1], &buf);
if (S_ISLNK(buf.st_mode))
printf(“链接文件!\n”);
if (S_ISREG(buf.st_mode))
printf(“普通文件\n”);
return 0;
}
gcc后输入 ./a.out 10
系统自带的ls -l 查看符号链接文件时的处理,应该不是使用stat这个函数来操作。