我想知道是否有一些API可以在Linux上获取当前进程的命令行参数。
我想我非常不清楚。这个问题的真正目的是通过命令行参数传递unicode文件名。
答案 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)
只需使用argc
和argv
即可。 argv
将使用本地编码(可能是UTF-8),然后您可以转换为wchar_t
(例如,通过mbtowc
)。
答案 3 :(得分:1)
Linux本身并不执行“Unicode文件名”。就内核而言,所有文件名只是8位字符的随机序列。
糟糕的事情可能发生,例如用户可以编写文件然后更改其区域设置,将其文件名编码为先前的区域设置。因此,如果您将文件名作为输入,则需要保留在main()中传递给您的确切8位字节序列。如果需要将其显示给用户,请尝试使用当前语言环境的编码对其进行解释,并转换为您喜欢的Unicode类型。
在许多现代Linux系统上,编码将是UTF-8,因此通常可以正常工作。