Linux与GetCommandLine和CommandLineToArgv的等价物?

Linux与GetCommandLine和CommandLineToArgv的等价物?,c,linux,api,C,Linux,Api,我想知道是否有一些API可以在Linux上获取当前进程的命令行参数 我想我当时非常不清楚。这个问题的真正目的是通过命令行参数传递unicode文件名。checkout这是一个命令行解析库,用包括C在内的多种语言实现 否则: int main(int argc, char *argv[]) argv是一个参数数组,如char*和argc是参数数 argv[0]始终是可执行文件名本身 从文件读取/proc/self/cmdline 例如: [wallyk@zf ~]$ od -a /proc/3

我想知道是否有一些API可以在Linux上获取当前进程的命令行参数


我想我当时非常不清楚。这个问题的真正目的是通过命令行参数传递unicode文件名。

checkout这是一个命令行解析库,用包括C在内的多种语言实现

否则:

int main(int argc, char *argv[])
argv
是一个参数数组,如
char*
argc
是参数数


argv[0]
始终是可执行文件名本身

从文件读取
/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

只需使用
argc
argv
argv
将采用本地编码(可能是UTF-8),从那里您可以转换为
wchar\u t
(例如,通过
mbtowc
)。

Linux本身不做“Unicode文件名”。就内核而言,所有文件名都只是8位字符的随机序列

不好的事情可能会发生,比如用户可以编写一个文件,然后更改其区域设置,将其文件名保留在以前的区域设置中。因此,如果将文件名作为输入,则需要保留在main()中传递给您的精确8位字节序列。如果需要将其显示给用户,请尝试用当前语言环境的编码对其进行解释,并将其转换为您最喜欢的Unicode类型


在许多现代Linux系统上,编码将是UTF-8,因此这通常可以正常工作。

intmain(intargc,char*argv[])
,在
argc
中有参数的数量,
argv
是包含参数的
char
指针数组。这是ANSIC,因此将适用于任何可移植的实现。还是要命令行选项解析?我明白了。我知道argc-argv范式。我想知道如何通过argv获得unicode参数。argv将提供shell放在其中的任何内容;由于shell只将其视为字节字符串,因此会将其推回到终端。现在所有的通用终端都支持unicode,所以它应该可以正常工作。注意每个令牌之间的空字节(0x00)分隔。此外,/proc/self/cmdline中的文本将与用户键入的内容不完全相同——引号将被删除,等等。还请注意,当前的
/proc
界面仅显示命令行的第一页(4k),即使它可能更长(我相信最多32页)。