2012-10-23 85 views
0

我的理解是,在Windows中,命令行參數保存在Process Environment Block中。命令行參數如何從shell傳遞到主函數?

1)它們如何存儲在類Unix系統中?

2)他們在那裏保存了什麼格式/結構?這個概念有一個共同的/一般的名字嗎?

在大多數語言中,命令行參數已經可用於類似於數組的東西。

3)什麼時候解析他們?

(例如,在Windows上的C程序的情況下,其他語言和平臺是受歡迎的,太。)

4)如何在「陣列」在相關的數據的PEB數據? 5)什麼約束(如最大尺寸,ro等),如果有的話,對命令行參數有效,這取決於什麼,存儲這些信息的方式以及如何(通過什麼)它生效了嗎?

6)像Bash(帶readline)的shell是否打算做的不僅僅是幫助人類用戶以更方便的方式輸入參數?也就是說。 shell在處理命令行參數時通常會有一些「積極」的作用?

7)管道(在命令行中)與命令行參數有什麼關係?

8)其他值得一提的信息?

(當然請糾正我,如果這個問題有錯誤的假設或者是不正確的。)

回答

2

1)它們都存儲在堆棧,它由內核編寫的。

2)內核中有一個副本,用戶空間中有一個副本。在用戶空間中,它是一個簡單的指向數組的指針,它們都指向以空字符結尾的字符串。這不可能比這更簡單。內核的副本僅供參考。即用於/ proc。如果它太長(它不太確定),它會被截斷。 3)當你在shell中鍵入命令時,shell解析它。當你打電話給system()時,libc解析它。當你調用execve時,你在調用之前解析它。在任何情況下,內核都不會解析它。

5)堆棧的大小限制它。 ulimit -a

7)管道和重定向不是cmdline arg的一部分。解析器處理這個問題。