GetCommandLine linux *true* equivalent
GetCommandLine linux *true* equivalent
类似于Linux中的GetCommandLine和CommandLineToArgv
是否有可能在linux中获得raw命令行?文件/proc/self/cmdline被销毁
./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中没有长字符串命令行这样的东西——是上面的层需要将参数拆分为单独的组件。
但是上面的语句仍然适用。argv的参数在内核从c库调用exec获得它时已经被分割了。
生成argv[]数组是"程序启动器"(通常是shell,但不一定是)的责任。它将执行"globbing"(将通配符文件名扩展到它匹配的实际文件)和去掉引号,变量替换等等。
我还要指出,尽管在C库中有几种"exec"的变体,但只有一种方法可以进入内核。所有的变体最终在execve
系统调用,我链接到上面。其他变体只是因为调用者可能不喜欢将参数拆分为单独的元素,所以C库通过为程序员做这件事来"帮助"。类似地,将环境数组传递给新程序—如果程序员不需要特定的环境,他/她可以调用自动接受父进程env的变量。
相关文章:
- 无论条件是否为true,if总是在c++中执行
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- C++ equivalent to Java Map getOrDefault?
- Arduino-C++ bool 不会从 false 变为 true
- 如何使布尔变量仅在设置为 true 时才为真?
- Equivalent of OpenCv c++ api Vec2f,norm, acos in emgucv csha
- C++ 如果在 if 为 true 之后运行,为什么还会这样做
- 为什么组合的上限和下限比较的计算结果总是为 true?
- Win32 equivalent of getgid
- 对于完成布尔值设置为 true 后未停止的循环
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- vfprintf_unlocked() equivalent?
- OLE DB 大容量复制操作始终将 true 加载到位列中
- cin.fail() not returning true
- Fmod 函数清楚地输出一个预期的双精度值,但 if(fmod == 预期的双精度值)的计算结果不是 true
- 如何使用boost定义布尔类,可能的值应该是TRUE或FALSE?
- What is the std::chrono::time_point equivalent of std::numer
- AVX equivalent for _mm_movelh_ps
- GetCommandLine linux *true* equivalent