linux下给定一个目录,如何获取目录下一个连接文件的文件名

加盾男爵 2018-05-28 11:54:08
假如有个目录/home/doc,下面有个连接文件,该文件连接到另一个目录即
/home/doc/allName->/home/class

在/home/class下躺了两个文件name1和name2,现在我希望的是同伙目录名/home/doc获得连接文件/home/doc/allName的文件名

char dirPath[BUFF_SIZE] = {"/home/doc/"};
DIR* dp = opendir(DIR_PATH);
struct dirent* dir;
while((dir = readdir(dp)) != NULL)
{
int len = strlen(dir->d_name) + strlen(dirPath) + 1;
char fileName[len];
strncpy(fileName,dirPath,strlen(dirPath)+1);
strcat(fileName,dir->d_name);
printf("%s\n",fileName);
}

这里我希望的输出结果/home/doc/allName
但实际的输出结果确实
/home/class/name1
/home/class/name2
这种情况该怎么解决?
...全文
1574 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklinux 2018-05-28
  • 打赏
  • 举报
回复
代码确实可以获取链接文件的
加盾男爵 2018-05-28
  • 打赏
  • 举报
回复
引用 9 楼 weixin_42329134 的回复:
链接文件名可以获得啊,代码就是开始的代码
是用我的代码吗?拿你试下/dev/fd这个目录行不行。能不能获得文件名
代码小渣渣 2018-05-28
  • 打赏
  • 举报
回复
链接文件名可以获得啊,代码就是开始的代码
加盾男爵 2018-05-28
  • 打赏
  • 举报
回复
引用 5 楼 jklinux 的回复:
[quote=引用 2 楼 qazaq408 的回复:]
[quote=引用 1 楼 jklinux 的回复:]
你的DIR_PATH是指向哪里的? 这代码没问题

写错了,DIR_PATH就是"/home/doc"[/quote]
难道用的不是软链接而且硬链接? 软链接的话应没问题[/quote]
我写了一个demo

#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>

int main(int argc , char* argv[])
{
if(argc != 2)
{
printf("The Wrong Count Of Argument.\n");
exit(1);
}

DIR* dp = opendir(argv[1]);
struct dirent* dirs;
while ((dirs = readdir(dp)) != NULL)
{
printf("%s\n",dirs->d_name);
}
exit(0);
}

编译完成后,/dev/fd目录下就有一个连接文件,连接到别的目录,我希望的是获得这个链接文件的文件名,但程序运行结果是链接文件链接的目录里的文件名
加盾男爵 2018-05-28
  • 打赏
  • 举报
回复
引用 6 楼 weixin_42329134 的回复:
可以判断文件的类型,S_ISLNK应该能解决
现在的问题是没有办法获得这个链接文件的文件名。。。。没有文件名就没办法用lstat()函数获得stat结果再用S_ISLNK宏去判断文件类型
代码小渣渣 2018-05-28
  • 打赏
  • 举报
回复
可以判断文件的类型,S_ISLNK应该能解决
jklinux 2018-05-28
  • 打赏
  • 举报
回复
引用 2 楼 qazaq408 的回复:
[quote=引用 1 楼 jklinux 的回复:] 你的DIR_PATH是指向哪里的? 这代码没问题
写错了,DIR_PATH就是"/home/doc"[/quote] 难道用的不是软链接而且硬链接? 软链接的话应没问题
加盾男爵 2018-05-28
  • 打赏
  • 举报
回复
引用 3 楼 qq_36751214 的回复:
是根据文件查找,链接文件的链接吗?这个实现不了吧。
不是我的意思是目录A下有个链接文件,这个链接文件是链接到另一个目录的,现在我有目录A的路径,能否通过目录A的路径来获得A目录下的这个文件名,我上面的代码只能获得链接文件链接到的目录下的文件
金秋枣香 2018-05-28
  • 打赏
  • 举报
回复
是根据文件查找,链接文件的链接吗?这个实现不了吧。
加盾男爵 2018-05-28
  • 打赏
  • 举报
回复
引用 1 楼 jklinux 的回复:
你的DIR_PATH是指向哪里的? 这代码没问题
写错了,DIR_PATH就是"/home/doc"
jklinux 2018-05-28
  • 打赏
  • 举报
回复
你的DIR_PATH是指向哪里的? 这代码没问题

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧