Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Taille d'un argument passé en ligne de commande limité !
Envoyé par: benthebest

Bonjour,

Je précise tout d'abord que je ne suis vraiment pas calé en linux

Je vous expose mon soucis:

J'ai un site PHP dans lequel je fais appel à la fonction exec() qui me permet d'appeler un exécutable java avec 5 arguments.

Or le problème est que parmi mes 5 arguments, il y en a un qui peut être une chaine très longue !

Or linux (et d'après ce que j'ai pu lire Windows aussi) limite apparemment la taille d'un argument à un nombre de caractères maximum.


Je ne savais pas ceci et c'est pour cela que des fois ça marchait et des fois non...

Pouvez-vous me donner un moyen de contourner ceci, d'augmenter par exemple pour tel argument la taille maximum autorisé


Un grand merci d'avance.

Poste le Tuesday 4 May 2010 21:56:06
Répondre     Citer    
Re: Taille d'un argument passé en ligne de commande limité !
Envoyé par: Basile_S

On peut configurer la taille maximale pour le tableau des arguments en recompilant son noyau.

Il faut alors éditer à la main le fichier include/linux/limits.h dans l'arborescence source du noyau et y modifier la définition de ARG_MAX.

En toute rigueur, c'est plutôt déconseillé (car ça permettrait peut-être des attaques en déni de service...) et il faut surtout mettre une limite qui est petite devant la RAM (physique) disponible. Par exemple, avec 4Go de RAM on peut se permettre de mettre 2097152 (je suggère de mettre une puissance de deux).

Ensuite, il faut évidemment configurer, compiler, et installer le noyau. Ce n'est pas forcément facile pour un néophyte.

La bonne façon de faire, c'est de modifier le protocole d'appel du programme, par exemple en écrivant la longue donnée dans un fichier (temporaire) et en modifiant le programme exécuté (par execve) de sorte qu'il puisse lire la grosse donnée dans un fichier.

----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Monday 10 May 2010 13:39:59
Répondre     Citer    
Re: Taille d'un argument passé en ligne de commande limité !
Envoyé par: Sve@r

Basile_S a écrit:
-------------------------------------------------------
> On peut configurer la taille maximale pour le
> tableau des arguments en recompilant son noyau.
>
> Il faut alors éditer à la main le fichier
> include/linux/limits.h dans l'arborescence source
> du noyau et y modifier la définition de ARG_MAX.

Bonjour,
Il n'est pas embêté par le nombre d'arguments (il dit d'ailleurs qu'il n'en a que 5)... mais par la taille d'un de ces arguments. Donc ça ne sert à rien d'aller recompiler le noyau !!!


benthebest a écrit:
-------------------------------------------------------
> Bonjour,
>
> Je précise tout d'abord que je ne suis vraiment
> pas calé en linux
>
> Je vous expose mon soucis:
>
> J'ai un site PHP dans lequel je fais appel à la
> fonction exec() qui me permet d'appeler un
> exécutable java avec 5 arguments.
>
> Or le problème est que parmi mes 5 arguments, il
> y en a un qui peut être une chaine très longue

Bonjour,
L'idée de Basile d'aller lire le fichier est bonne. Mais plus en amont de ça, il faudrait se demander surtout pourquoi t'as une chaine si longue à traiter. D'où vient cette chaine ? T'as mémorisé un gros truc ???

L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Saturday 19 June 2010 10:45:38
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Taille d'un argument passé en ligne de commande limité !
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons