GetCommandLine linux * true *等价

类似的问题到Linux相当于GetCommandLine和CommandLineToArgv

是否有可能在Linux获得原始命令行? / proc / self / cmdline文件是destroyd。

./a.out files="file 1","file 2" param="2" 

版画

 ./a.outfiles=file 1,file 2param=2 

这是垃圾

转义命令行对所有参数都有效,但是第一个参数是可用的。

 ./a.out files=\"fil 1\",\"fil 2\"\ param=\"2\" 

版画

 ./a.outfiles="fil1","fil2" param="2" 

你不能这样做。 命令行参数实际上作为单个字符串传递给新的进程。 查看linux内核源码: kernel_execve

请注意, kernel_execve(...)采用了一个const char *argv[] – 所以在Linux中没有长字符串命令行这样的事情 – 它是上面的层需要将参数拆分成单独的组件。

编辑:实际上,系统调用是在这里:

消除系统调用

但上述声明仍然适用。 内核从C库调用exec的时候,argv的参数已经被分割了。

这是“程序启动器”(通常是一个shell,但不一定是)产生argv []数组的责任。 它将执行“通配符”(通配符文件名扩展到与其匹配的实际文件)以及剥离引用,可变替换等等。

我还要指出的是,虽然在C库中有几个“exec”的变体,但内核只有一个方法。 所有的变种最终在我链接到上面的execve系统调用。 其他变体只是因为调用者可能不喜欢将参数拆分为各个元素,所以C库通过为程序员做“帮助”。 同样,将环境数组传递给新程序 – 如果程序员不需要特定的环境,他/她可以调用自动获取父进程env的变体。