Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/05/2006, à 21:22

*Serval

[Réglé] Executer un script C

Bonjour à tous smile
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 tongue

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 tongue


Merci d'avance pour votre aide smile

Dernière modification par *Serval (Le 22/05/2006, à 23:59)

Hors ligne

#2 Le 19/05/2006, à 23: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, à 23:14)

Hors ligne

#3 Le 19/05/2006, à 23:25

*Serval

Re : [Réglé] Executer un script C

Waw super smile
Un énorme merci à toi, rapide clair et précis, juste ce qu'il faut pour un néophite comme moi tongue

Réglé smile

@+ et encore merci
*Serval qui s'endormira heureux ce soir tongue


[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, à 23:29)

Hors ligne

#4 Le 19/05/2006, à 23: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, à 23: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é smile

Merci à toi smile

Je vais cependant quand même copier l'autre solution dans mon astuces_linux.txt tongue


[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, à 23:42)

Hors ligne

#6 Le 19/05/2006, à 23: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, à 23: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, à 23:53

*Serval

Re : [Réglé] Executer un script C

oki super pour strncat, je connaissais pas tongue

j'ai monté le buffer à 3072 (3 * 1024 si j'ai bien compté tongue)

Merci pour ces conseils smile


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 ? wink

Hors ligne

#9 Le 20/05/2006, à 00:11

Yorf

Re : [Réglé] Executer un script C

En effet, j'ai manqué de précision. hmm
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 smile

#10 Le 20/05/2006, à 00: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 wink

seulement je ne trouves pas les lignes qu'il me demande de décomenter dans ~/.bashrc wink

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, à 01: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 tongue

Sinon vous pouvez me dire où je dois faire les modifs proposées par jp.fox ?

Merci smile

Hors ligne

#12 Le 22/05/2006, à 19:31

jp.fox

Re : [Réglé] Executer un script C

jp.fox a écrit :

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 roll

Ajoute les lignes de code ci dessus dans ton fichier ~/.bashrc

$ gedit ~/.bashrc

Hors ligne

#13 Le 22/05/2006, à 23:47

*Serval

Re : [Réglé] Executer un script C

ouip mais comme dis 2 posts en dessous, ca marchait pas wink

mais c'est parce que j'ai fait le noob, j'ai pas ouvert un nouveau terminal tongue

Excuse et encore merci à tous les 2, vous me facilitez la vie smile smile smile

Hors ligne

#14 Le 23/05/2006, à 23: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, à 23:55)


Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne

#15 Le 24/05/2006, à 00:31

*Serval

Re : [Réglé] Executer un script C

houla serait-ce possible que j'ai tant bouletisé ? tongue

A mon avis tu as raison, je vais changer ca smile

Et oki pour 4*1024 smile
(4096 tongue)

Hors ligne