Je n'ai malheureusement pas le temps de me mettre en C ou de parCourir tous les forums dédiés à Cette programmation... Je CherChe donC une âme Charitable pour me "traduire" Cette petite fonCtion bash:
myfunc()
{
if [ "$1" ]
then
/bin/a arg1 arg2 "$@"
else
/bin/b
fi
}
(si au moins un argument alors programme a avec mes arguments et le(s) argument(s) initialement passé(s), sinon programme b)
MerCi d'avanCe. :-)
# Précisions
Posté par Pyscal . Évalué à -1.
Un numéro figure au début du post. Il est passé de 0 à -1: que cela signifie-t-il?
[^] # C'est du C
Posté par nono14 (site web personnel) . Évalué à 8.
Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités
# 100 balles, un Mars et...
Posté par Kerro . Évalué à 5.
# lire ton cours ;)
Posté par NeoX . Évalué à 6.
une piste pourrait etre de faire une recherche sur ARGV ARGC
qui devrait decrire comment gerer les arguments en C
# Pourquoi en C ?
Posté par Obsidian . Évalué à 4.
Et pourtant, je programme beaucoup en C…
[^] # Re: Pourquoi en C ?
Posté par Tonton Benoit . Évalué à 3.
On alors comme dit au dessus parce que c'est un exercice...
[^] # Re: Pourquoi en C ?
Posté par Pyscal . Évalué à 2.
C'est tout à fait cela : l'exécutable généré prendra en fait la place du programme a,qui sera renommé, et du coup, ce dernier sera nécessairement appelé avec les paramètres arg1 et arg2...
Prenons l'exemple de la commande ls: je veux que celle-ci soit systématiquement appelée avec les paramètres -l -h mais je ne veux pas m'appuyer sur les artifices des shells (alias, fonctions, etc...) et je veux de plus que, si aucun argument n'est passé alors le man soit affiché. Je cache alors l'original ls (.ls par exemple ou un renommage complet) et le remplace par mon ls maison. L'exemple est un peu tiré par les cheveux mais l'idée est là: empêcher l'utilisation directe de l'original sans avoir à ré-écrire ce dernier...
[^] # Re: Pourquoi en C ?
Posté par netsurfeur . Évalué à 4.
Tu as le droit de remplacer un programme binaire par un script portant le même nom.
Dans ton exemple, il suffit de baptiser ton script /bin/ls et le tour est joué.
[^] # Re: Pourquoi en C ?
Posté par Pyscal . Évalué à 1.
En d'autres termes, hormis le fait que le script sera plus facilement étudiable, le fait de remplacer le binaire 'ls' par un script - disons bash ou python - ne posera aucun problème aux différents autres binaires (ou scripts) qui appelaient le binaire original?
[^] # Re: Pourquoi en C ?
Posté par Kerro . Évalué à 0.
Nan je veux dire pour autre chose que cliquer dans des menus.
[^] # Re: Pourquoi en C ?
Posté par netsurfeur . Évalué à 3.
Exactement.
Il suffit d'aller faire un tour dans /bin ou /usr/bin pour voir que c'est déjà le cas:
$ file /bin/* | grep script
/bin/bzdiff: POSIX shell script text executable
/bin/bzexe: POSIX shell script text executable
/bin/bzgrep: POSIX shell script text executable
/bin/bzmore: POSIX shell script text executable
/bin/gunzip: Bourne-Again shell script text executable
/bin/gzexe: Bourne-Again shell script text executable
/bin/lesspipe: POSIX shell script text executable
...
[^] # Re: Pourquoi en C ?
Posté par Obsidian . Évalué à 2.
[^] # Re: Pourquoi en C ?
Posté par chimrod (site web personnel) . Évalué à 1.
# Fork ?
Posté par redfire . Évalué à -1.
Vu que c'est un script shell, tu ne dois pas rechercher la portabilité. Donc tu pourrais utiliser l'appel système fork (reproduire le comportement du shell en quelque sorte).
Ça ne prend que quelques lignes. Je pourrais te coder ça dans la soirée si tu en as toujours besoin ;-).
redfire.
[^] # Re: Fork ?
Posté par Pyscal . Évalué à 0.
[^] # Re: Fork ?
Posté par mathgl . Évalué à 0.
# Premier jet
Posté par redfire . Évalué à -1.
Code disponible ici (je ne parvenais pas à lui donner la bonne apparence sur linuxfr).
J'ai écrit ça rapidement mais ça devrait fonctionner. Donc pour exécuter tes différents programmes, tu as juste à mettre le nom du programme 1 dans app1 (entre les guillemets) et pareil dans app2 (le nom suffit, il va chercher lui-même dans $PATH).
Comportement : si au moins un argument alors programme 1 avec arguments sinon programme 2.
J'ai testé le retour des appels systèmes bien qu'en principe si l'un d'eux échoue, ce petit programme ne sera pas le soucis réel...
Je ne sais pas si tu as déjà compilé un programme C mais dans le doute :
gcc -Wall -o nom du programme fichier.c
Si des erreurs se sont glissées dans le code, n'hésitez pas à le signaler. Je reconnais que c'est un peu l'artillerie lourde...
À bientôt.
redfire
# Oubli du lien
Posté par redfire . Évalué à -2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.