我们知道我们可以使用ln file1 file2在Linux中创建硬链接(hard link),这会使file2成为file1的硬链接(hard link)。

但是,当我尝试使用C程序执行此操作时,会遇到问题。下面是C代码。

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

int main(int argc, char *argv[])
{
    if ((strcmp (argv[1],"ln")) == 0 )
    {
            char *myargs[4];
            myargs[0] = "ln";
            myargs[1] = argv[3];
            myargs[2] = argv[4];
            myargs[3] = NULL;
            execvp(myargs[0], myargs);
            printf("Unreachable code\n");
    }
    return 0;
}

用gcc编译该程序后,我如下运行。
$ ./a.out ln file1 file2
ln: failed to access ‘file2’: No such file or directory
$

这里file1存在,并且file2是所需的硬链接(hard link)。

谁能指出我在哪里犯错了。

谢谢。

最佳答案

根据您显示的测试输入

$ ./a.out     ln      file1     file2
    ^         ^        ^         ^
    |         |        |         |
  argv[0]  ..[1]    ..[2]     ..[3]

在你的代码中
        myargs[1] = argv[3];
        myargs[2] = argv[4];

应该读
        myargs[1] = argv[2];
        myargs[2] = argv[3];

也就是说,在将argv[n]argc进行检查之后,最好使用n+1

08-06 18:03