检查符号链接的目标是否存在的方法是什么?

时间:2015-09-08 11:46:55

标签: c linux

使用c程序我需要找到并删除目录中缺少目标的所有符号链接。

检查符号链接的目标是否存在的最有效方法是什么。除打开符号链接以外的任何方法并检查返回值。我正在使用linux和gcc。

3 个答案:

答案 0 :(得分:1)

设置了access ()模式的F_OK功能将遵循符号链接路径。

以下代码将打印"是!"如果符号链接和目标文件都存在...

#include <stdio.h>
#include <unistd.h>

int
main (void)
{
    if (access ("test.txt", F_OK) != -1) {
        puts ("Yes!");
        return 0;
    }

    puts ("No.");
    return 1;
}

答案 1 :(得分:1)

stataccess,或者open。这就是你所能做的一切。

答案 2 :(得分:1)

来自man 3 stat手册页

  

如果指定的文件是符号链接,则stat()函数应使用。继续路径名解析          符号链接的内容,如果是,则返回与结果文件有关的信息          文件存在。

所以以下工作很好:

#include <sys/stat.h>
#include <stdio.h>

int main() {
  struct stat ctx;
  int status = stat("test.txt", &ctx);
  if(status != 0) {
    perror("[stat]");
    return 1;
  }
  else {
      puts("works nice");
  }
  return 0;
}