C linux symlink()函数在绝对路径上断开

C linux symlink()函数在绝对路径上断开,c,linux,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 = symlin

为什么会这样:

#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;
}
但这是:

#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;
}
#包括
#包括
#包括
内部主(空){
const char filea[]=“/home/gala/testing/test/hunspell”;
const char fileb[]=“/home/gala/testing/testa/dictionaries”;
返回器;
returnr=symlink(文件A、文件B);
printf(“%d\n”,returnr);
返回器;
}
返回-1并失败

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


为什么它坏了?

你确定你的路径是好的吗?如果您在
/home/gala/testing/test
中运行
,那么
文件b
的路径应该是
/home/gala/testing/testa/dictionares
而不是
/home/gala/testing/testa/dictionares
您确定您的路径正确吗?如果您在
/home/gala/testing/test
中运行
,那么
文件b
的路径应该是
/home/gala/testing/testa/dictionares
而不是
/home/gala/testing/testa/dictionares
,您是否检查了
-1
的含义?我在网上找不到任何参考资料。我可以找到指向整数的“静态”字符串,但我不知道该去哪里找。我不做C,我只做Java,我在做一个C库桥来使用Java中的libc和Linux函数
man symlink
,查看错误代码,然后:要么在源代码树中找到它们的定义,要么直接转储它们的值。添加一个
perror(“symlink”)在失败的
symlink
后查看错误。由于两个程序创建[我认为]相同的链接,并且完整路径的所有组件都存在(例如,
/home/gala
存在),第二个程序可能只是说“链接路径已经存在”。(即)它是用第一个程序创建的。测试时,请确保先删除要创建的链接。您可以查看
errno
并忽略
EEXIST
,或者最好先在
symlink
上方执行
取消链接(fileb)
,如果您再次运行pgm1,我打赌您会得到一个errorNice!它返回>符号链接:没有这样的文件或目录,但为什么?为什么第一个代码示例在创建一个不存在的文件的符号链接时不返回该值?您是否检查了
-1
的含义?我在网上找不到任何参考。我可以找到指向整数的“静态”字符串,但我不知道该去哪里找。我不做C,我只做Java,我在做一个C库桥来使用Java中的libc和Linux函数
man symlink
,查看错误代码,然后:要么在源代码树中找到它们的定义,要么直接转储它们的值。添加一个
perror(“symlink”)在失败的
symlink
后查看错误。由于两个程序创建[我认为]相同的链接,并且完整路径的所有组件都存在(例如,
/home/gala
存在),第二个程序可能只是说“链接路径已经存在”。(即)它是用第一个程序创建的。测试时,请确保先删除要创建的链接。您可以查看
errno
并忽略
EEXIST
,或者最好先在
symlink
上方执行
取消链接(fileb)
,如果您再次运行pgm1,我打赌您会得到一个errorNice!它返回>符号链接:没有这样的文件或目录,但为什么?为什么第一个代码示例在创建不存在的文件的符号链接时不返回该值?
#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;
}