About command line arguments of main function

后端 未结 4 1341
暗喜
暗喜 2020-12-19 07:44

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 si

相关标签:
4条回答
  • 2020-12-19 08:24

    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
    
    0 讨论(0)
  • 2020-12-19 08:24

    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.

    0 讨论(0)
  • 2020-12-19 08:37

    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.

    0 讨论(0)
  • 2020-12-19 08:48

    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.

    0 讨论(0)
提交回复
热议问题