codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
/* * THANK YOU: http://predef.sourceforge.net/preos.html */ #include <stddef.h> /* size_t */ #include <errno.h> /* Mac OS X */ #if defined(__APPLE__) # include <mach-o/dyld.h> char *getexename(char *buff, size_t n) { uint32_t size; size = n; if (_NSGetExecutablePath(buff, &size)==0) { errno = ERANGE; return (char *)0; } return buff; } /* Linux */ #elif defined(linux)||defined(__linux) # include <sys/types.h> # include <unistd.h> char *getexename(char *buff, size_t n) { pid_t pid; char name[256]; int r; pid = getpid(); snprintf(name, sizeof(name), "/proc/%i/exe", (int)pid); if ((r = readlink(name, buff, n))==-1) return (char *)0; else if(r >= n) { errno = ERANGE; return (char *)0; } buff[r] = 0; return buff; } /* Solaris */ #elif (defined(sun)||defined(__sun))&&(defined(__SVR4)||defined(__svr4__)) # include <stdlib.h> char *getexename(char *buff, size_t n) { strncpy(buff, getexecname(), n-1); buff[n-1] = 0; return buff; } /* FreeBSD */ #elif defined(__FreeBSD__) # include <sys/sysctl.h> char *getexename(char *buff, size_t n) { size_t size; int name[4]; name[0] = CTL_KERN; name[1] = KERN_PROC; name[2] = KERN_PROC_PATHNAME; name[3] = -1; if (sysctl(name, sizeof(name)/sizeof(name[0]), buff, &size, 0, 0)==-1) return (char *)0; return buff; } /* UNIX */ #elif defined(unix)||defined(__unix__) # include <stdio.h> # include <stdlib.h> char *getexename(char *buff, size_t n) { char *s; if ((s=getenv("_"))!=(char *)0) { snprintf(buff, s, n-1); buff[n-1] = 0; return buff; } /* out of luck buddy, write a port */ fprintf(stderr, "getexename: your unix distribution isn't supported.\n"); fflush(stderr); return (char *)0; } /* Windows */ #elif defined(_WIN32) # include <windows.h> char *getexename(char *buff, size_t n) { if (!GetModuleFileNameA(NULL, buff, n)) return (char *)0; return buff; } /* wtf? */ #else # error "No? Write a port." #endif #include <stdio.h> #include <errno.h> int main() { char buff[1024]; if (!getexename(buff, sizeof(buff))) { perror("getexename"); return errno; } printf("executable name: %s\n", buff); return 0; }
Private
[
?
]
Run code
Submit