lstat返回< 0

时间:2016-06-25 14:40:07

标签: c file stream macros directory

基本上,这应该是一段简单的代码,用于打开目录流并查找符号链接。每当找到符号链接时,应该打印(“找到符号链接”); 但是,lstat(dirp->d_name,&buf调用始终返回值< 0,我不知道为什么。 我创建了两个打开文件夹的符号链接,打开文件夹内的终端窗口并运行 ln -s ciao.txt link1ln -s ciao2.txt link2 我知道我应该稍后在我的代码中致电closedir(),请不要关心这一点。

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

void main (int argc, char* argv[])
{
    char buffer[100],dir[100];
    struct stat buf;
    int x;
    DIR *dp;
    struct dirent *dirp;
    if((dp=opendir(argv[1]))==NULL)
    {
        printf("\nError opening directory stream, now exiting...\n");
        exit(-1);
    }
    while((dirp=readdir(dp))!=NULL)
        {
            lstat(dirp->d_name,&buf);
            if(S_ISLNK(buf.st_mode))    
                printf("\n%s Is a symbolic link\n",dirp->d_name);
            else
                printf("\n%s Is not a symbolic link\n",dirp->d_name);



        }


}

一些帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

d_name是目录中的文件名,而不是完整路径名。您必须将chdir收集到您正在查看的目录中,或构建文件的完整路径名。

最简单的解决方案是在while循环之前添加此行:

chdir(argv[1]);