B
BetaWolf
Grünschnabel
Wie kann ich feststellen in einem Programm feststellen wo es sich selbst befindet? Ich würde gerne einige Dinge unabhängig von wo das Programm gestartet wird aus dem Programmordner laden.
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion erfordert derzeit den Zugriff auf die Seite über den integrierten Safari-Browser.
whereis Programmname
man 3 getcwd
Möglichkeiten:— The value of argc shall be nonnegative.
— argv[argc] shall be a null pointer.
— If the value of argc is greater than zero, the string pointed to by argv[0]
represents the program name; argv[0][0] shall be the null character if the
program name is not available from the host environment.
$ cd /home/user
$ cat readlink.c
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <libgen.h>
int main(int argc, char *argv[]) {
char buf[1024];
char *dname;
int len;
if ((len = readlink("/proc/self/exe", buf, sizeof(buf)-1)) != -1) {
buf[len] = '\0';
}
printf("readlink(\"/proc/self/exe\", ...)\t== %s\n", buf);
printf("dirname(\"%s\", ...)\t== ", argv[0]);
dname = dirname(argv[0]);
printf("%s\n", dname);
return EXIT_SUCCESS;
}
$ gcc readlink.c -o readlink
$ ln -s /home/user/readlink /bin/MY_READLINK
$ cd /
$ MY_READLINK
readlink("/proc/self/exe", ...) == /home/user/readlink
dirname("MY_READLINK", ...) == .
$ ls -lah /usr/bin/cc
lrwxrwxrwx 1 root root 20 2008-01-27 02:11 /usr/bin/cc -> /etc/alternatives/cc*
$ ls -lah /etc/alternatives/cc
lrwxrwxrwx 1 root root 12 2008-01-27 02:11 /etc/alternatives/cc -> /usr/bin/gcc*
$ ls -lah /usr/bin/gcc
lrwxrwxrwx 1 root root 7 2008-01-27 02:11 /usr/bin/gcc -> gcc-4.1*
$ cd /home/user && mv readlink foo/
$ ln -s /home/user/foo/readlink /home/user/readlink
$ ls -lah /bin/MY_READLINK
lrwxrwxrwx 1 root root 21 2009-03-13 19:01 /bin/MY_READLINK -> /home/user/readlink*
$ ls -lah readlink
lrwxrwxrwx 1 user user 25 2009-03-13 19:56 readlink -> /home/user/foo/readlink*
$ MY_READLINK
readlink("/proc/self/exe", ...) == /home/user/foo/readlink
dirname("MY_READLINK", ...) == .