linux symlink()函数在绝对路径上被破坏

时间:2016-05-02 17:42:11

标签: c linux

为什么这样:

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

int main(void) {
        const char filea[] = "../test/hunspell";
        const char fileb[] = "testa/dictionaries";
        int returnr;
        returnr = symlink(filea, fileb);
        printf("%d\n", returnr);
        return returnr;
}

返回0,我明白了:

[gala@arch test]$ tree
.
├── symtest
├── test
├── testa
│   └── dictionaries -> ../test/hunspell
└── test.c

[gala@arch test]$ pwd
/home/gala/testing/test

但是这个:

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

int main(void) {
        const char filea[] = "/home/gala/testing/test/hunspell";
        const char fileb[] = "/home/gala/testing/testa/dictionaries";
        int returnr;
        returnr = symlink(filea, fileb);
        printf("%d\n", returnr);
        return returnr;
}

返回-1并失败。

为什么c symlink()函数在绝对路径上失败但在相对路径上工作?有什么我想念的吗?

为什么会坏掉?

1 个答案:

答案 0 :(得分:2)

你确定你的路径好吗?如果您在tree中投放了/home/gala/testing/test,则fileb的路径应为/home/gala/testing/test/testa/dictionaries而不是/home/gala/testing/testa/dictionaries