Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用stat()确定文件是否为符号链接?_C_Symlink_Inode - Fatal编程技术网

C 如何使用stat()确定文件是否为符号链接?

C 如何使用stat()确定文件是否为符号链接?,c,symlink,inode,C,Symlink,Inode,基本上,我必须为一个类编写一个unixls命令的克隆,而且我几乎所有的东西都在工作。有一件事我似乎不知道该怎么做,那就是检查一个文件是否是符号链接。在stat()页面中,我看到定义了一个mode\u t值,S\u iflink 这就是我如何在没有运气的情况下检查文件是否为sym链接(注意,stbuf是stat()将inode数据返回到的缓冲区): 我的代码总是打印这不是链接,即使它是,我知道所述文件是一个符号链接,因为实际的ls命令是这样说的,加上我创建了sym链接 谁能看出我做错了什么?谢谢你

基本上,我必须为一个类编写一个unixls命令的克隆,而且我几乎所有的东西都在工作。有一件事我似乎不知道该怎么做,那就是检查一个文件是否是符号链接。在
stat()
页面中,我看到定义了一个
mode\u t
值,
S\u iflink

这就是我如何在没有运气的情况下检查文件是否为sym链接(注意,stbuf是
stat()
将inode数据返回到的缓冲区):

我的代码总是打印
这不是链接
,即使它是,我知道所述文件是一个符号链接,因为实际的ls命令是这样说的,加上我创建了sym链接

谁能看出我做错了什么?谢谢你的帮助

你不能


您需要使用
来统计链接本身,普通的
stat()
将跟随链接,因此永远不会“看到”链接本身。

那么为什么要使用stat()命令呢?我刚刚尝试使用lstat(),它似乎提供了相同的信息,只是它处理链接。只有当您知道自己没有处理任何符号链接时,才会使用stat()?处理符号链接时也会使用stat(),通常情况下,您不关心路径是常规文件还是链接,而是关心所使用的文件。例如,链接的mtime是完全无趣的,链接指向的文件的mtime是。
stat()
确实处理链接,它只是以不同的方式处理它们-它跟随链接并告诉您它指向的文件(正如wich指出的,这通常是您想要的)。您使用stat()当您希望链接以“正常方式”运行时,即链接指向的文件。只有需要区分链接和非链接的应用程序才需要使用lstat()。从my stat(2)手册页引用:lstat()与stat()相同,只是如果路径是符号链接,则链接本身是stat-ed,而不是它引用的文件。
switch(stbuf.st_mode & S_IFMT){
    case S_IFLNK:
        printf("this is a link\n");
        break;
    case S_IFREG:
        printf("this is not a link\n");
        break;
}