We know we can create hard link in Linux using ln file1 file2
which will make file2
a hard link of file1
.
However when I try to do this by using a C program, I face issues. Below is the C code.
#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 coden"); } return 0; }
After compiling this program with gcc I run it as below.
$ ./a.out ln file1 file2 ln: failed to access ‘file2’: No such file or directory $
Here file1
exists and file2
is the desired hardlink.
Could anyone point where did I make mistake here.
Thanks.
Advertisement
Answer
As per the test input shown by you
$ ./a.out ln file1 file2 ^ ^ ^ ^ | | | | argv[0] ..[1] ..[2] ..[3]
in your code
myargs[1] = argv[3]; myargs[2] = argv[4];
should read
myargs[1] = argv[2]; myargs[2] = argv[3];
That said, it is always better and advisable to use the argv[n]
after checking argc
against n+1
.