003
17.04.2010, 23:03 Uhr
0xdeadbeef
Gott (Operator)
|
Wenn ich die Dokumentation richtig lese (kann das im Moment nicht testen), sollte das unter Windows so gehen:
C++: |
TCHAR filename[MAX_PATH]; GetModuleFileName(NULL, filename, MAX_PATH);
|
Unter Linux, wie gesagt, kannst du die gesamte Kommandozeile aus /proc/$PID/cmdline parsen. Beispielsweise so:
C++: |
#include <algorithm> #include <fstream> #include <iostream> #include <iterator> #include <sstream> #include <stdexcept> #include <string> #include <vector>
#include <unistd.h>
template<typename to_t, typename from_t> to_t convert(from_t const &x) { std::stringstream converter; to_t r;
converter << x; converter >> r;
if(!converter) { throw std::invalid_argument("Konvertierung fehlgeschlagen."); }
return r; }
int main() { std::string token; std::vector<std::string> args;
std::ifstream in(("/proc/" + convert<std::string>(getpid()) + "/cmdline").c_str());
while(std::getline(in, token, '\0')) { args.push_back(token); }
std::copy(args.begin(), args.end(), std::ostream_iterator<std::string>(std::cout, "\n")); }
|
Das natürlich unter der Voraussetzung, dass das Programm nicht in argv rumgeschrieben hat. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 17.04.2010 um 23:04 Uhr von 0xdeadbeef editiert. |