About command line arguments of main function

微笑、不失礼 提交于 2019-12-29 07:44:15

问题


It will look like int main(int argc, char *argv[]);. My questions are:

1 How many array items can I add in argv[]?

2 What is MAX size of every char *?


回答1:


You can try:

$ getconf ARG_MAX
2180000

http://pubs.opengroup.org/onlinepubs/007904975/basedefs/limits.h.html

ARG_MAX is maximum length of argument to the exec functions including environment data.

That is, there is no individual limit on the number of arguments or argument's length. Only the limit on total size required to store all the arguments and environment variables.

xargs figures out maximum command line length using sysconf(_SC_ARG_MAX); which yields the same value as reported by getconf ARG_MAX.

On Linux command line arguments and environment variables are put into new process' stack. So, the process/thread maximum stack size is the ultimate upper bound. Linux-specific limits are hardcoded in the kernel:

#define MAX_ARG_STRLEN (PAGE_SIZE * 32)
#define MAX_ARG_STRINGS 0x7FFFFFFF



回答2:


Both of those are bounded only by how much memory you have (or how much memory your OS gives your program).

EDIT: Actually, the number of arguments is also bounded by the size of int.




回答3:


I think you're misunderstanding what's going on here. You don't, in your code, add anything to argv[], and you don't worry about their maximum sizes. When somebody runs your compiled program, as

./javas_program argument1 argument2 argument3

then your main function will be called. argc will be 4, argv[0] will be ./javas_program, argv[1] will be argument1, argv[2] will be argument2, etc.

In your program, you should assume that the contents of argv[] can be any size. If you want to limit them to a specific size, you should check that they're not larger than that.




回答4:


It probably depends on the mechanism you are using to start your program. If it is through a shell (bash or whatever) you'd have to look up if it imposes restrictions.

If you start your program through execv or something similar, they should only be subject to the same restrictions as any array and string, and, as somebody noted, because argc is int for historical reasons, to the limited size of int not of size_t.



来源:https://stackoverflow.com/questions/7498892/about-command-line-arguments-of-main-function

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!