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
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
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.
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
.
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
.