Linux相当于GetCommandLine和CommandLineToArgv?

时间:2010-01-05 01:38:09

标签: c linux api

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


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

4 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:3)

checkout Getopt这是一个命令行解析库,它以多种语言实现,包括C.

否则:

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

argv是一个参数数组,char*argc是参数的数量。

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

答案 2 :(得分:1)

只需使用argcargv即可。 argv将使用本地编码(可能是UTF-8),然后您可以转换为wchar_t(例如,通过mbtowc)。

答案 3 :(得分:1)

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

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

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