据我所知,在Windows中,命令行参数保存在Process Environment Block中。
1)它们如何存储在类Unix系统中?
2)他们在那里保存了什么格式/结构?这个概念是否具有共同/通用名称?
在大多数语言中,命令行参数已经类似于数组。
3)什么解析它们,什么时候?
(例如,对于Windows上的C程序,也欢迎使用其他语言和平台。)
4)PEB中的数据如何与“数组”中的数据相关?
5)什么约束(例如,max.size,ro等),如果有的话,对命令行参数有效,这依赖于什么,存储此信息的内容以及如何(通过什么)它生效了吗?
6)像Bash这样的shell(带有readline)是否打算做的不仅仅是帮助人类用户以更方便的方式输入参数?即。 shell在处理命令行参数时通常会有一些“主动”角色吗?
7)管道(在命令行中)如何与命令行参数相关?
8)还有其他值得一提的信息吗?
(当然,如果问题有错误假设或不正确,请纠正我。)
答案 0 :(得分:2)
1)它们存储在堆栈中,由内核准备。
2)内核中有一个副本,用户空间中有一个副本。在用户空间中,它是一个简单的指针数组,所有指针都指向空终止字符串。它不能比这更简单。内核的副本仅供参考。即用于/ proc。如果它太长(它不太确定),它会被截断。
3)当你在shell中输入命令时,shell会解析它。当你调用system()
时,libc会解析它。当你调用execve时,你在调用之前解析它。在任何情况下,内核都不解析它。
5)堆栈的大小限制了它。 ulimit -a
7)管道和重定向不是cmdline arg的一部分。解析器处理此问题。