Inclure des commandes bash dans C

Fermé
crypto - 26 mars 2011 à 13:32
 crypto - 27 mars 2011 à 01:14
Bonjour,


Je souhaite savoir comment inclure des commandes que l'on utilise dans un terminal dans un programme en C.

Exemple avec la plus banal des commandes , ifconfig, dans cette exemple je veux qui m'affcihe le résultat de la commande et qu'il change le MTU.


system("ifconfig");
sleep(60);
if (MTU==1500)
{
system("commande pour mettre le MTU a 1400 par exemple")
}
break;;

Est-ce possible d'agir comme ceci? ou y a t-il plus simple?
Mon but et de m'habituer au C vu que je connais déga bien le bash.


12 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
26 mars 2011 à 13:51
Je t'ai dit que la commande c'est plutôt sur le forum GNU/Linux qu'il faut aller...
Ce que tu fais ce n'est pas du C, mais juste l'encapsulation de shell dans du C via system.
Je redirige donc ton post...
0
Je c bien mais un modo ma redirigé ici pourtant
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
26 mars 2011 à 13:58
Beh ce que tu cherches avant tout c'est la commande shell pour mettre le MTU à 1400. C'est donc bien du GNU/Linux.
Une fois que tu auras la commande, t'auras plus qu'à la mettre dans ta fonction system.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
26 mars 2011 à 14:01
Moi ce que j'ai compris c'est qu'il cherche à faire interpréter une commande bash par une fonction en C, non ?

D'une, il ne connait pas la commande bash et c'est bien ici qu'il doit demander.
De deux, il la connait et c'est propre au C, donc via Programmation.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
26 mars 2011 à 13:56
Salut,

mais juste l'encapsulation de shell dans du C via system
Donc la base c'est du C, non ?
Il aura plus de chance d'avoir des réponses dans Programmation qu'ici ;-\

Mon but et de m'habituer au C vu que je connais déga bien le bash.
Ou alors j'ai mal compris ;-(
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
26 mars 2011 à 14:06
Ce qu'il semble le bloquer est la commande pour changer le MTU.
Une fois qu'il l'aura, il n'aura plus qu'à mettre exactement la même commande dans la fonction system(). Donc à mon sens c'est du Linux.
D'ailleurs tout ce qu'on met dans la fonction system() relève plus du shell puisque c'est le propre de cette fonction.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
+1 zip31 je veux pouvoir faire fonctionner des commandes bash avec les "if" "else" du C.

On va prendre un autre exemple le MTU c'est vrai c'est pas top, dans l'exemple qui va suivre je veux changer mon adresse mac par rapport a celle d'origine donc est-ce que si je fais:
system("ifconfig");
sleep(60);
if (MAC==00:26:1B:30:65:90)
{
system("ifconfig wlan0 hw ether 00:11:22:33:44:55")
}
break;;



c'est bon comme ça?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
26 mars 2011 à 14:10
Désolé, mon truc c'est le bash (et encore), le C je n'y connais rien ;-(
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
Modifié par fiddy le 26/03/2011 à 14:13
Je vais faire un récapitulatif que les choses soient claires.
La fonction system("") te permet d'émuler le shell (grosso modo). Donc tout ce que tu mets dans cette fonction, c'est ce que tu obtiendras si tu avais tapé la commande dans ton shell. Donc si tu cherches une commande (comme pour changer le MTU) via system c'est ici que tu dois demander.
Pour tout ce qui n'est pas de la fonction system(), tu dois demander sur Programmation.
De plus, ne compte pas sur la fonction system() pour récupérer des variables.
Si tu veux récupérer l'adresse MAC, ce n'est pas avec system("ifconfig").
Il faudra utiliser des vraies fonctions en C. Et dans ce cas c'est bien sur la partie programmation que tu dois demander.
J'espère que c'est plus clair.
A toi de voir ce que tu veux vraiment et de bien l'écrire.
Cdlt,
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
26 mars 2011 à 14:09
Ce qu'on y met oui, mais ce qui l'y met non ;-\
0
je tente d'adapter mes scripts bash en C mais de façon plus automatisé ^^
0
Mdr sa m'avance pas beaucoup.
0
D'accord donc pour récupéré les variables tel que l'adresse MAC je dois inclure quoi dans le prog si je reprend l'exemple que j'ai donné?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
26 mars 2011 à 14:34
Ca m'avance pas beaucoup
Beh normal. Un coup tu veux faire du C, un coup tu fais du Shell...
Pour la réponse :
int main (void) {
    struct ifreq buf;
    int d;
    d = socket(PF_INET, SOCK_DGRAM, 0);

    memset(&buf, 0, sizeof buf));

    strcpy(buf.ifr_name, "TON INTERFACE");

    ioctl(d, SIOCGIFHWADDR, &buf);
    
    close(d);
    return 0;
}

L'adresse MAC se trouve dans : buf.ifr_hwaddr.sa_data
0
Ok merci ^^ pourrais tu me donner une liste de fonction pour récupéré plus de choses, le nom de mon réseau, le cryptage, l'addresse mac du réseau, le canal etc...

Je tente de faire en sorte que si trop de monde se connecte sur ma box (par exemple pas plus de 4 personne en wifi) l'accès en soit refusé avec un temps d'attente jusqu'a ce que quelq'un se deconnecte.
0
Up
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
Modifié par fiddy le 26/03/2011 à 23:26
Ces fonctions n'existent pas toutes faites en C, il faut les construire soit-même soit avoir recours à une bibliothèque. Sur google, tu devrais trouver ces fonctions là. Mais effectivement ce n'est pas si évident.
0
d'accord, mais pour aller plus vite tu connaitrais pas un site qui donne une liste de bibliothèque concernant les réseaux sans fil?
0