7
votes

À propos des arguments de ligne de commande de la fonction principale

Il ressemblera à int Main (int Argc, char * argv []); . Mes questions sont:

1 Combien d'éléments de tableau puis-je ajouter dans argv [] ?

2 Quelle est la taille maximale de chaque char * ?


5 commentaires

Je pense que c'est dépendant de la mise en œuvre, vous ne pouvez pas compter sur une liaison spécifique.


Si vous avez besoin de passer tellement de paramètres que vous devez penser à ces limites supérieures, votre risque de faire quelque chose de mal. Vous avez probablement besoin d'une forme d'IPC.


Mais pourquoi avez-vous besoin de ces informations? Si vous avez besoin, vous faites peut-être quelque chose de mal.


1 J'utilise Linux 2, je transmettrai une info de beaucoup d'informations par Script PHP à l'aide d'Exec (). 3 Je pense que l'utilisation de fichier pour échanger les données coûtera plus de temps que d'utiliser des arguments de la fonction principale. Merci


@javas: Un fichier n'est pas la seule forme d'IPC, par exemple, vous pouvez utiliser popen et écrire beaucoup de données via le tuyau. Mais sur Linux, les lignes de commande sont autorisées à être très longues de toute façon, pour supporter des éléments tels que ls * journal .


4 Réponses :


3
votes

Les deux de ceux-ci ne sont délimités que par la quantité de mémoire que vous avez (ou la quantité de mémoire que votre système d'exploitation donne votre programme).

Edit: En réalité, le nombre d'arguments est également délimité par la taille de int .


3 commentaires

Ou combien de mémoire votre système d'exploitation donne pour la ligne CMD (qui est assez limitée dans la plupart des osses, et parfois très durcodé)


Je pense que cette réponse répond à «Quelle est la taille maximale de tout Char * toujours», alors que le questionneur, probablement dû à un malentendu, demande quelle taille maximale du Char * s dans ARGV [ ] sont.


Windows vous donne très peu de mémoire (parfois, il s'agit de quelques ko de ligne de commande arguments), tandis que toutes les plates-formes UNIX sont si généreuses que si vous avez besoin de plus, vous le faites mal.



0
votes

Je pense que vous êtes mal compris ce qui se passe ici. Dans votre code, vous n'avez pas ajouté quelque chose à argv [] et vous ne vous inquiétez pas de leur taille maximale. Lorsque quelqu'un dirige votre programme compilé, comme xxx

, votre fonction principale sera appelée. argc sera 4, argv [0] sera ./ javas_program , argv [1] sera < code> argument1 , argv [2] sera argument2 , etc.

Dans votre programme, vous devez supposer que le contenu de argv [] peut être n'importe quelle taille. Si vous voulez les limiter à une taille spécifique, vous devriez vérifier qu'ils ne sont pas plus grands que cela.


0 commentaires

0
votes

Cela dépend probablement du mécanisme que vous utilisez pour démarrer votre programme. Si c'est via une coquille ( bash ou autre), vous devez rechercher si elle impose des restrictions.

Si vous démarrez votre programme via Execv ou quelque chose de similaire, ils ne doivent être soumis que dans les mêmes restrictions que n'importe quel tableau et chaîne, et, comme une personne notée, car argc est int pour des raisons historiques, à la taille limitée de int non de taille_t . .


0 commentaires

4
votes

Vous pouvez essayer: xxx

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

arg_max est une longueur maximale de l'argument sur les fonctions EXED, y compris les données d'environnement.

C'est-à-dire, il n'y a pas de limite individuelle sur le nombre d'arguments ou de la longueur de l'argument. Seule la limite de taille totale requise pour stocker tous les arguments et les variables d'environnement.

xargs chiffres de la longueur de la ligne de commande maximale à l'aide de SYSCONF (_sc_arg_max); qui donne la même valeur que celle rapportée par getconf arg_max .

sur les arguments de ligne de commande Linux et les variables d'environnement sont placées dans une nouvelle pile de processus. Donc, la taille de la pile de processus / filetage est la limite supérieure ultime. Les limites spécifiques à Linux sont codé en dur dans le noyau : xxx


0 commentaires