Operating system 命令行参数的使用方式";通过;从shell到main函数?

Operating system 命令行参数的使用方式";通过;从shell到main函数?,operating-system,command-line-arguments,Operating System,Command Line Arguments,据我所知,在Windows中,命令行参数保存在Process Environment块中 1)它们如何存储在类Unix系统中? 2)它们以什么格式/结构保存在那里?此概念是否有通用/通用名称? 在大多数语言中,命令行参数已经在类似于数组的东西中可用 3)是什么将它们解析成这种形式的,以及什么时候? (例如,对于Windows上的C程序,也欢迎使用其他语言和平台。) 4)PEB中的数据与“阵列”中的数据有何关联? 5)对命令行参数有效的约束条件(如最大大小、ro等)是什么,这取决于什么,存储此信息

据我所知,在Windows中,命令行参数保存在Process Environment块中

1)它们如何存储在类Unix系统中?

2)它们以什么格式/结构保存在那里?此概念是否有通用/通用名称?

在大多数语言中,命令行参数已经在类似于数组的东西中可用

3)是什么将它们解析成这种形式的,以及什么时候?

(例如,对于Windows上的C程序,也欢迎使用其他语言和平台。)

4)PEB中的数据与“阵列”中的数据有何关联?

5)对命令行参数有效的约束条件(如最大大小、ro等)是什么,这取决于什么,存储此信息的内容是什么,以及如何(通过什么)将其付诸实施?

6)像shell一样的Bash(带readline)除了帮助人类用户以更方便的方式输入参数外,还打算做更多的事情吗?Ie.shell在处理命令行参数时通常扮演更“主动”的角色吗

7)管道(在命令行中)如何与命令行参数相关?

8)关于这方面还有什么值得一提的信息吗?

(当然,如果问题有错误的假设或不正确,请纠正我。)

1)它们存储在由内核准备的堆栈上

2) 内核中有一个副本,用户空间中的堆栈上有一个副本。在用户空间中,它是一个简单的指针数组,所有指针都指向以null结尾的字符串。再简单不过了。内核的副本用于提供信息。i、 e.在/proc中使用。如果它太长(对此不是很确定),它将被截断

3) 在shell中键入命令时,shell将对其进行解析。当您调用
system()
时,libc将解析它。调用execve时,在调用之前对其进行了解析。在任何情况下,内核都不会解析它

5) 堆栈的大小限制了它<代码>ulimit-a

7) 管道和重定向不是cmdline arg的一部分。解析器处理这个问题