Linux эквивалентный GetCommandLine и CommandLineToArgv? - PullRequest
8 голосов
/ 05 января 2010

Интересно, есть ли какой-нибудь API для получения аргументов командной строки текущего процесса в Linux.


Я думаю, мне было ужасно неясно. Реальная цель этого вопроса заключалась в передаче имен файлов Unicode через аргументы командной строки.

Ответы [ 4 ]

11 голосов
/ 05 января 2010

Чтение из файла /proc/self/cmdline

Например:

[wallyk@zf ~]$ od -a /proc/30651/cmdline
0000000   /   u   s   r   /   s   b   i   n   /   h   t   t   p   d nul
0000020

Или, для удовлетворительно освежающей ссылки на себя:

[wally@zf images]$ od -c /proc/self/cmdline
0000000   o   d  \0   -   c  \0   /   p   r   o   c   /   s   e   l   f
0000020   /   c   m   d   l   i   n   e  \0
0000031
3 голосов
/ 05 января 2010

checkout Getopt Это библиотека синтаксического анализа командной строки, которая реализована на многих языках, включая C.

В противном случае:

int main(int argc, char *argv[])

argv - массив аргументов, char* и argc - количество аргументов.

argv[0] всегда само исполняемое имя файла.

1 голос
/ 25 декабря 2012

Linux не использует "имена файлов Unicode" как таковые. Все имена файлов - это просто случайные последовательности 8-битных символов для ядра.

Могут случиться плохие вещи, например, пользователь может написать файл и затем изменить свою локаль, оставив свое имя файла в кодировке в предыдущей локали. Поэтому, если вы берете имя файла в качестве ввода, вам нужно сохранить точную 8-битную последовательность байтов, переданную вам в main (). Если вам нужно показать его пользователю, попробуйте интерпретировать его в кодировке текущей локали и преобразовать в ваш любимый тип Unicode.

Во многих современных системах Linux кодировка будет UTF-8, поэтому в целом это будет работать нормально.

1 голос
/ 05 января 2010

Просто используйте argc и argv. argv будет в локальной кодировке (это может быть UTF-8), и оттуда вы можете преобразовать в wchar_t (например, через mbtowc).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...