Tuesday, February 6, 2024

[SOLVED] Get the file that is calling the current executable through a symbolic link

Issue

In a Linux system, I'm trying to write a C program source.c which can behave differently according to the caller through a symbolic link. It compiles into an executable file source, and there are multiple files linked to it:

ln -s source link1

ln -s source link2

I want to make source output differently when I call link1 vs link2, but I can't find a way to recognize, in source.c, the filename of the caller.

I've read the readlink solution, but it only returns the source.


Solution

By convention, argv[0] will contain the name used to invoke the program. You can use this to see which symlink it was called with.

int main(int argc, char *argv[])
{
   if (!strcmp(argv[0], "link1") {
       // do actions for link1
   } else if (!strcmp(argv[0], "link2") {
       // do actions for link2
   } else {
       printf("invoked as unknown name: %s\n", argv[0]);
   }
   return 0;
}
    


Answered By - dbush
Answer Checked By - Timothy Miller (WPSolving Admin)