簡體   English   中英

最大命令行參數

[英]Max command line arguments

我知道xargs --limitsgetconf ARG_MAX 是否值得考慮有人達到這個限制的想法,如果是這樣,會對程序產生任何負面影響嗎? 例如,假設你這樣做:

std::vector<std::string> v(argv, argv + argc);

可能發生的最糟糕的事情是拋出std::bad_alloc嗎?

對我而言,由於內存不足,這與任何其他分配錯誤沒有什么不同。 我會離開它的方式 - 畢竟,如果你遇到這個問題,除了讓程序終止(這是默認行為)之外,你可以做的事情很少。

通常,在使用較舊的shell時,您會在命令行中達到“限制” - 在這種情況下,它是對shell進程中保存命令行參數的緩沖區的限制(即,您嘗試啟動程序使用太長的命令行,因此shell會截斷它或報告錯誤)

如果有人試圖用太多參數調用程序, exec*()操作將失敗並且您的程序不會運行。 因此,只能使用適合參數空間和環境變量的參數列表來調用您的程序。

如果你的程序試圖調用另一個程序並且你的程序創建了一個太大的參數列表,那么你的程序將無法exec*()另一個exec*() ,因為參數加上環境太大,得到錯誤E2BIG。

理論上,您可能會遇到將參數列表復制到字符串向量中的內存分配問題,但這種可能性相對較小。 Linux上的實際限制大約為128 KiB,Mac OS X上大約為256 KiB。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM