#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char **argv) {
char path[1024];
memset(path, 0, 1024);
if (argv[0][0] == '/') {
// argv[0] contains the full path
strncpy(path, argv[0], strrchr(argv[0], '/') - argv[0]);
} else if (strrchr(argv[0], '/')) {
// argv[0] contains a relative path
getcwd(path, 1024);
strcat(path, "/");
strncat(path, argv[0], strrchr(argv[0], '/') - argv[0]);
} else {
// argv[0] contains no path
char *envpath = getenv("PATH");
char *pch = strtok(envpath, ":");
while (pch) {
strcpy(path, pch);
strcat(path, "/");
strcat(path, argv[0]);
if (access(path, F_OK) == 0) {
strcpy(path, pch);
break;
}
pch = strtok(NULL, ":");
}
}
printf("The full path to this program is \"%s\"\n", path);
return 0;
}