Pages : 1
#1 Le 18/09/2007, à 19:09
- Link31
[HOWTO] Script C
N'avez-vous jamais eu envie d'écrire et de lancer des programmes e C aussi facilement que de simples scripts shell ? Eh bien c'est possible
Tout d'abord, installez le nécessaire pour développer en C si ce n'est pas déjà fait, à savoir le paquet build-essential.
Puis il vous faut placer ce script dans /usr/local/bin/cscript (gksudo gedit /usr/local/bin/cscript) :
#!/bin/bash
FILENAME=$1
shift
INTERACTIVE=0
WD=$(pwd)
if [ -z $FILENAME ]
then
FILENAME=$(mktemp)
cat > $FILENAME
TEMP=$FILENAME
INTERACTIVE=1
else
TEMP=$(mktemp)
fi
PARAMETERS=$(cat $FILENAME | grep '/*CMDLINE=' | awk -F '/*CMDLINE=' '{print $2}' | sed 's/*\///g')
cd $(dirname $FILENAME)
if [ $INTERACTIVE -eq 0 ]
then
cat "$WD/$FILENAME" | tail -n $(($(wc -l "$WD/$FILENAME" | cut -d" " -f1)-1)) > "$TEMP-src"
else
cat "$FILENAME" > "$TEMP-src"
fi
cat "$TEMP-src" | gcc -x c -o $TEMP $PARAMETERS - > /dev/null
if [ -f $TEMP ]
then
if [ -x $TEMP ]
then
$TEMP $*
fi
rm $TEMP
rm "$TEMP-src"
fi
cd "$WD"
Pensez à le rendre exécutable :
sudo chmod +x /usr/local/bin/cscript
Maintenant, testez-le :
link31@linux ~ $ cscript
#include <stdio.h>
int main()
{
printf("hello world!\n");
return 0;
}
Ctrl+D
Si tout se passe bien, vous devriez obtenir : hello world!
Voilà, vous venez d'exécuter du code C depuis le terminal
Ce n'est pas tout, ce script peut aussi servir à lancer des scripts C, de la même façon que n'importe quel script shell.
Enregistrez le code suivant dans ~/scriptc.c
#!/bin/env cscript
/*CMDLINE=-lm*/
#include <stdio.h>
#include <math.h>
void cosinus(float value)
{
printf("cos(%f)=%f\n", value, cos(value));
}
int main()
{
cosinus(0.5);
return 0;
}
Remarquez les deux premières lignes : la première sert à indiquer l'interpréteur (le script cscript donné plus haut), la seconde sert à indiquer les options de compilation (-lm pour les fonctions mathématiques).
Rendez-le exécutable :
cd
chmod +x scriptc.c
Et testez-le :
./scriptc.c
Vous devriez obtenir quelque chose comme : cos(0.500000)=0.877583
On peut indiquer des arguments à passer au programme comme ceci, par exemple :
./scriptc.c --help
Voilà, c'est une petite astuce assez utile pour tester des bouts de code C directement dans le terminal, ou pour écrire des scripts en C quand vous ne savez pas comment faire en shell. De plus, vous n'avez pas besoin de vous rappeler les options de compilation à passer à gcc, et à compiler le fichier à la main, tout est fait de façon transparente.
Avec un PC pas trop vieux et un code pas trop long, la "compilation" du script peut être quasi-instantanée, donc pas de souci de ce côté-là.
J'attends vos commentaires
Dernière modification par Link31 (Le 24/09/2007, à 03:33)
Hors ligne
#2 Le 18/09/2007, à 19:18
- alexduf
Re : [HOWTO] Script C
whaou !
c'est énorme
Faudrait l'adapter à java (oui ok je suis java-addict et alors ^^)
je m'y colle pour le fun
[edit]
brève réflexion, en java faut le même nom pour une classe que pour le fichier.java... pas pratique
[/edit]
Dernière modification par alexduf (Le 18/09/2007, à 19:25)
Hors ligne
#3 Le 20/09/2007, à 02:51
- Link31
Re : [HOWTO] Script C
up
Y aurait-il si peu de programmeurs C ici ?
Hors ligne
#4 Le 20/09/2007, à 13:58
- reeth
Re : [HOWTO] Script C
Bon moi je ne suis pas un spécialiste du C (juste les notions de bases...), alors je ne comprend pas très bien l'intérêt de ton script. Alors pour m'éclairer : quel est l'utilité de celui-ci? Automatiser la compilation?
Je ne comprends pas très bien comment l'utiliser :
reeth@reeth:~$ cscript #include <stdio.h> int main() { printf("hello"); return 0; }
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld a retourné 1 code d'état d'exécution
Bref un peu plus d'explications seraient bienvenues
Merci
Hors ligne
#5 Le 20/09/2007, à 16:08
- alexduf
Re : [HOWTO] Script C
L'intérêt c'est de pouvoir utiliser un langage compilé (le C) comme si c'était un langage interprété (comme le bash).
Y aurait-il si peu de programmeurs C ici ?
tu as posté ca dans la section "astuces"
Tu aurais eu plus de succès dans la section dev
Hors ligne
#6 Le 20/09/2007, à 18:16
- Link31
Re : [HOWTO] Script C
L'intérêt c'est de pouvoir utiliser un langage compilé (le C) comme si c'était un langage interprété (comme le bash).
Exactement.
@reeth : il faut faire comme dans mon exemple : taper cscript, puis entrée pour lancer la commande. Ensuite il faut taper ton code (attention, tu ne peux pas revenir à une ligne précédente), et confirmer avec Ctrl+D. Le programme se compile et se lance automatiquement.
Tu peux aussi l'utiliser en mode non-interactif (script), en t'inspirant de mon script exemple (le plus important est de ne pas oublier la première ligne -celle avec #!- et de ne pas oublier de rendre exécutable le script).
Hors ligne
#7 Le 20/09/2007, à 18:56
- scholi
Re : [HOWTO] Script C
heu c'est rigolo est geek, mais entre nous c'est pas super pratique
En effet, pour des petits scriptes, phython ou bash suffisent largement et donne des code plus léger, alors que le C est utiliser pour des "gros" programmes. Donc si chaque fois que tu fais ./source.c il faut attendre 30 secondes qu'il compile avant de s'exécuter, c'est pas top. De plus avec un makefile, le problème est résolu, il suffit de faire make et tout est ok. Si tu incorpore le ./nom_du_prog à la fin du makefile, il se lance aussi tout seul!
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
Hors ligne
#8 Le 20/09/2007, à 19:02
- Link31
Re : [HOWTO] Script C
Donc si chaque fois que tu fais ./source.c il faut attendre 30 secondes qu'il compile avant de s'exécuter, c'est pas top.
30 secondes ? Trouve-moi un fichier .c qui se compile en 30 secondes de nos jours ?
link31@linux ~/scripts $ wc -l prog.c
683 prog.c
link31@linux ~/scripts $ time ./prog.c # à froid
[...]
real 0m0.600s
user 0m0.060s
sys 0m0.028s
link31@linux ~/scripts $ time ./prog.c # à chaud
[...]
real 0m0.083s
user 0m0.064s
sys 0m0.021s
Donc : moins d'une seconde à froid (chargement de gcc, etc...) et moins de deux dixièmes de secondes à chaud. Ce qui peut largement compenser la lenteur d'exécution d'un script bash sur des traitements lourds.
De plus avec un makefile, le problème est résolu, il suffit de faire make et tout est ok. Si tu incorpore le ./nom_du_prog à la fin du makefile, il se lance aussi tout seul!
Oui mais tu ne peux pas lui spécifier des arguments aussi facilement, et ce n'est pas aussi pratique à lancer depuis un script externe. Là, les options de compilation sont directement stockées dans le source, il n'y a qu'un fichier, et non pas 3 (source, Makefile, exécutable) dans le cas de make.
En plus, avec make tu ne peux pas écrire du code directement dans le terminal.
Dernière modification par Link31 (Le 20/09/2007, à 19:07)
Hors ligne
#9 Le 20/09/2007, à 19:35
- reeth
Re : [HOWTO] Script C
Ok sa marche chez moi. Donc en fait le but est de rendre transparent la compilation. C'est assez sympa. Je verrais si je fait un peu de C cette année (scolaire), je testerai plus en profondeur le truc
Hors ligne
Pages : 1