Pages : 1
#1 Le 19/05/2006, à 20:22
- *Serval
[Réglé] Executer un script C
Bonjour à tous
alors voila, j'ai créé un petit script C pour backuper rapidement en fichier (créer une copie avec l'extension .bak)
C'est mon second script, donc c'est mal codé, mais là n'est pas le problème
J'aimerais pouvoir utliser mon script partout sans devoir taper
./c/bak/bak plop.txt
Est-ce possible de configurer quelques choses pour pouvoir ne taper que
bak plop.txt
où que je sois sur mon hdd ?
Je sais que sur les machines de mon unif, cette 2eme solution suffit
Merci d'avance pour votre aide
Dernière modification par *Serval (Le 22/05/2006, à 22:59)
Hors ligne
#2 Le 19/05/2006, à 22:11
- jp.fox
Re : [Réglé] Executer un script C
Tape la commande
$ echo $PATH
Tu as ainsi la liste des dossiers dans lesquels tu peux mettre ton exécutable c. Il s'agit du chemin de recherche pour trouver les executables.
Tu peux aussi supprimer les commentaires devant les lignes suivantes dans ton fichier ~/.bashrc
# Prepend ~/bin to PATH if it exists
if [ -d ~/bin ] ; then
PATH=~/bin:"${PATH}"
fi
Et te créer un dossier ~/bin dans lequel tu pourra mettre tes programmes perso.
(cela ne fonctionnera qu'à la prochaine ouverture d'un terminal)
J'espère que ça répond à ta question.
Dernière modification par jp.fox (Le 19/05/2006, à 22:14)
Hors ligne
#3 Le 19/05/2006, à 22:25
- *Serval
Re : [Réglé] Executer un script C
Waw super
Un énorme merci à toi, rapide clair et précis, juste ce qu'il faut pour un néophite comme moi
Réglé
@+ et encore merci
*Serval qui s'endormira heureux ce soir
[edit] au passage, si ca interesse quelqu'un de corriger ou de récupérer mon fichier bak.c, le voici :
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
int main(int argv, char** argc)
{
if(argv != 2)
{
return -1;
}
bak(argc[1],argc[1]);
return 0;
}
int bak(char *source)
{
FILE* fSource;
FILE* fDestination;
char buffer[512];
int NbLu;
int i =0;
char *p;
for (p = source; *p != '\0'; p++)
{
i++;
}
int foo;
foo = i + 4;
char destination[foo];
strcpy(destination,source);
destination[i] = '.';
destination[i+1] = 'b';
destination[i+2] = 'a';
destination[i+3] = 'k';
printf(destination);
if((fSource=fopen(source, "rb")) == NULL)
{
return -3;
}
if((fDestination=fopen(destination, "w+b")) == NULL)
{
fclose(fSource);
return -4;
}
while((NbLu=fread(buffer, 1, 512, fSource)) != 0)
{
fwrite(buffer, 1, NbLu, fDestination);
}
fclose(fSource);
fclose(fDestination);
}
Dernière modification par *Serval (Le 19/05/2006, à 22:29)
Hors ligne
#4 Le 19/05/2006, à 22:28
- Yorf
Re : [Réglé] Executer un script C
Salut,
Je pense que la méthode la plus simple pour faire ce que tu désires consiste à ajouter un alias :
ajoute dans le fichier ~/.bashrc une ligne du type
alias bak='[chemin d'accès]/c/bak/bak'
++
#5 Le 19/05/2006, à 22:31
- *Serval
Re : [Réglé] Executer un script C
Tiens c'est vrai, pas bête Yorf, je n'y avais même pas pensé
Merci à toi
Je vais cependant quand même copier l'autre solution dans mon astuces_linux.txt
[edit] je ne trouves pas ces lignes dans ./bashrc
puis-je les ajouter au fichier /etc/profile ?
Dernière modification par *Serval (Le 19/05/2006, à 22:42)
Hors ligne
#6 Le 19/05/2006, à 22:42
- Yorf
Re : [Réglé] Executer un script C
destination[i] = '.';
destination[i+1] = 'b';
destination[i+2] = 'a';
destination[i+3] = 'k';
Tu peux faire ça plus simplement :
strncat(destination, ".bak", 4);
Au passage je te conseillerai d'utiliser des buffers plus gros que 512 octets pour des copies de fichiers, genre quelques kilos. Cela peut légèrement accélèrer la copie de gros fichiers.
#7 Le 19/05/2006, à 22:47
- Yorf
Re : [Réglé] Executer un script C
puis-je les ajouter au fichier /etc/profile ?
je pense que oui, mais dans ce cas elle sera sûrement prise en compte au prochain login. De plus, si ça marche, elle sera valable pour tous les utilisateurs ce qui risque de poser des problèmes de droits sur l'exécutable.
#8 Le 19/05/2006, à 22:53
- *Serval
Re : [Réglé] Executer un script C
oki super pour strncat, je connaissais pas
j'ai monté le buffer à 3072 (3 * 1024 si j'ai bien compté )
Merci pour ces conseils
Sinon si ca risque de poser problème dans /etc/profile, où dois-je le faire ? (ca n'a pas fonctionné dans ./bashrc ^^)
Et ca pose vraiment problème dans /etc/profile étant donné que je suis le seul utilisateur sur ce pc ?
Hors ligne
#9 Le 19/05/2006, à 23:11
- Yorf
Re : [Réglé] Executer un script C
En effet, j'ai manqué de précision.
Après quelques tests voilà précisément comment faire marcher ce truc :
Tout d'abord ajouter la ligne dans .bashrc :
echo "alias bak='chemin du prog'" >> ~/.bashrc
puis, pour prendre en compte l'alias
source ~/.bashrc
voilà ça devrai marcher
#10 Le 19/05/2006, à 23:14
- *Serval
Re : [Réglé] Executer un script C
je parlais plutôt de la solution de jp.fox pour créer un nouveau dossier bin qui serait dans le path
seulement je ne trouves pas les lignes qu'il me demande de décomenter dans ~/.bashrc
Sinon d'habitude je fais direct mes alias dans le terminal
alias bak="~/c/bak/bak"
Cela change quelque chose ?
Hors ligne
#11 Le 22/05/2006, à 00:06
- *Serval
Re : [Réglé] Executer un script C
oki j'ai vu que ca changeait quelque chose, si on défini l'alias direct dans la console, il est perdu au démarrage suivant
Sinon vous pouvez me dire où je dois faire les modifs proposées par jp.fox ?
Merci
Hors ligne
#12 Le 22/05/2006, à 18:31
- jp.fox
Re : [Réglé] Executer un script C
Tu peux aussi supprimer les commentaires devant les lignes suivantes dans ton fichier ~/.bashrc
# Prepend ~/bin to PATH if it exists if [ -d ~/bin ] ; then PATH=~/bin:"${PATH}" fi
Et te créer un dossier ~/bin dans lequel tu pourra mettre tes programmes perso.
(cela ne fonctionnera qu'à la prochaine ouverture d'un terminal)
C'est écrit dans le post en question
Ajoute les lignes de code ci dessus dans ton fichier ~/.bashrc
$ gedit ~/.bashrc
Hors ligne
#13 Le 22/05/2006, à 22:47
- *Serval
Re : [Réglé] Executer un script C
ouip mais comme dis 2 posts en dessous, ca marchait pas
mais c'est parce que j'ai fait le noob, j'ai pas ouvert un nouveau terminal
Excuse et encore merci à tous les 2, vous me facilitez la vie
Hors ligne
#14 Le 23/05/2006, à 22:53
- gene69
Re : [Réglé] Executer un script C
hum pour la taille des tampons je propose une méthode complete qui chez moi donne 4*1024. comme valeurs optimale. avec stat()
http://jerikojerk.over-blog.net/article-2212842.html(francais)
Pour ce qui est du code... tu devrais vérifier ton fread...
SYNOPSIS
#include <stdio.h>size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite (const void *ptr, size_t size, size_t nmemb, FILE
*stream);DESCRIPTION
La fonction fread lit nmemb éléments de données, chacun d’eux représen‐
tant size octets de long, depuis le flux pointé par stream, et les
stocke à l’emplacement pointé par ptr.
fread(buffer, 1, 512, fSource)
j'ai l'impression que tu lis 512 fois un octet au lieux de lire une fois 512 octets.
Dernière modification par gene69 (Le 23/05/2006, à 22:55)
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#15 Le 23/05/2006, à 23:31
- *Serval
Re : [Réglé] Executer un script C
houla serait-ce possible que j'ai tant bouletisé ?
A mon avis tu as raison, je vais changer ca
Et oki pour 4*1024
(4096 )
Hors ligne
Pages : 1