Этот поток показывает, как сделать это на Linux.
http://linux.derkeiler.com/Newsgroups/comp.os.linux.development.system/2005-07/0147.html
Существует GetCommandLine () функция в API Win32. На других платформах необходимо ли было бы сохранить argc/argv где-нибудь (внешняя переменная?).
На Linux псевдофайл/proc/self/cmdline содержит командную строку для процесса. Каждый аргумент завершается с 0 байтами, и заключительный аргумент сопровождается на дополнительные 0 байтов.
На окнах можно получить доступ к argc/argv через __ argc и __ argv. __ wargv, если Вы хотите версию широкого символа.
Позвольте мне предположить, что это походит на странную ситуацию. Вы пишете плагин или что-то? Возможно, Вы не должны получать доступ к argv/argc?
В Windows можно использовать GetCommandLine (), чтобы получить указатель на командную строку и затем использовать CommandLineToArgvW () для преобразования того указателя на argv [] формат. Существует только широкое (Unicode) доступная версия, все же.
В Windows я использую этот тип вещи получить аргументы:
#include <windows.h>
#include <string>
#include <vector>
#include <cwchar>
#include <cstdio>
#include <clocale>
using namespace std;
vector<wstring> getArgs() {
int argc;
wchar_t** argv = CommandLineToArgvW(GetCommandLineW(), &argc);
vector<wstring> args;
if (argv) {
args.assign(argv, argv + argc);
LocalFree(argv);
}
return args;
}
int main() {
const vector<wstring> argv = getArgs();
setlocale(LC_CTYPE, ".OCP");
for (vector<wstring>::const_iterator i = argv.begin(); i != argv.end(); ++i) {
wprintf(L"%s\n", i->c_str());
}
}
Править: Функция getArgs как этот также полезна для mingw, поскольку mingw не поддерживает wmain ().
Используйте getpid () и команда PS.
международный pid;
интервал fd;
символьный cmd[80];
pid = getpid ();
sprintf (cmd, "PS %d", pid);
fd = popen (cmd, "r");
.... строки должны быть похожими
.... 1358. определение abc/a.out
Вы уделили какое-либо внимание использованию переменных среды вместо командной строки? Могло бы быть легче на пользователе в зависимости от того, в каких видах приложений библиотекой будут пользоваться, и можно использовать стандарт getenv () функция.
Я думаю, в любом случае, если Ваша библиотека собирается использовать argc и argv, программа должна быть той для передачи их.