I wonder if there are some API to get the current process\' command line arguments on Linux.
I guess I was terribly unclear. The real purpose of the question was a
Linux doesn't do "Unicode filenames" per se. All filenames are just random sequences of 8-bit characters as far as the kernel is concerned.
Bad things can happen, like the user can write a file and then change their locale, leaving their filename encoded in the previous locale. So if you're taking a filename as input, you need to preserve the exact 8-bit byte sequence passed to you in main(). If you need to display it to the user, try to interpret it in the encoding of the current locale and convert to your favorite type of Unicode.
On many modern Linux systems, the encoding will be UTF-8 so this will generally work OK.
Read from file /proc/self/cmdline
For example:
[wallyk@zf ~]$ od -a /proc/30651/cmdline
0000000 / u s r / s b i n / h t t p d nul
0000020
Or, for a satisfyingly refreshing self-reference:
[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
Just use argc
and argv
. argv
will be in the local encoding (which could be UTF-8), and from there you can convert to wchar_t
(e.g. via mbtowc
).
checkout Getopt It's a command line parsing library that's implemented in many languages including C.
Otherwise:
int main(int argc, char *argv[])
argv
is an array of arguments as char*
and argc
is the number of arguments.
argv[0]
is always the executable filename itself.