Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.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程序在Linux中创建硬链接_C_Linux_Execvp_Hardlink - Fatal编程技术网

如何从C程序在Linux中创建硬链接

如何从C程序在Linux中创建硬链接,c,linux,execvp,hardlink,C,Linux,Execvp,Hardlink,我们知道我们可以在Linux中使用ln file1 file2创建硬链接,这将使file2成为file1的硬链接 然而,当我尝试使用C程序来实现这一点时,我会遇到一些问题。下面是C代码 #include<stdio.h> #include<string.h> #include<unistd.h> int main(int argc, char *argv[]) { if ((strcmp (argv[1],"ln")) == 0 ) {

我们知道我们可以在Linux中使用
ln file1 file2
创建硬链接,这将使
file2
成为
file1
的硬链接

然而,当我尝试使用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;
}
此处存在
file1
,而
file2
是所需的硬链接

有人能指出我在这里哪里犯了错误吗


谢谢。

根据您显示的测试输入

$ ./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];

也就是说,在对照
n+1
检查
argc
之后,最好使用
argv[n]
,Shell脚本知识很少能很好地转移到C编程中。以下是您应该使用的
man 2链接

NAME
       link - make a new name for a file

SYNOPSIS
       #include <unistd.h>

       int link(const char *oldpath, const char *newpath);
名称
链接-为文件创建新名称
提要
#包括
int链接(常量字符*旧路径,常量字符*新路径);

使用C api代替外部shell工具的好处包括显著提高性能和消除标记注入

谢谢。多诺,我真的错过了!可能有一些帮助。int linRet=link(argv[2],argv[3]);如果(linkRet==0)返回1;文件*fp=fopen(argv[3],“r”);如果(fp!=NULL)printf(“文件%s的硬链接%s\n请求帮助,\n”,argv[3],argv[2]);
NAME
       link - make a new name for a file

SYNOPSIS
       #include <unistd.h>

       int link(const char *oldpath, const char *newpath);