CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Intégrer commandes unix dans un prog.

mecafreezer5
mecafreezer5
Niveau 6
17 juin 2008 à 14:14:12

Bonjours à tous.
Alors voila j'aimerai savoir comment intégrer des commandes unix, ou des scripts bach dans un petit programme écrit en C.
En gros je veux que mon programme puisse appeller des scripts et des commandes.
Exemple (bidon):
void ping ()
{ //appel de la commande ping }

Voila si vous avez des liens n'hésitez pas.
Merci

Sankukai
Sankukai
Niveau 10
17 juin 2008 à 14:19:56

Jette un oeil à :
$ man exec
tu devrais trouver tout ce qu'il faut.

++

mecafreezer5
mecafreezer5
Niveau 6
17 juin 2008 à 14:29:28

Merci de ta réponse trés rapide.
Donc si j'ai bien compris:

void ping (char *url)
{ exec(ping url); }

Et c'est bon??
Et je peux aussi passer un script en argument a exec ?

Sankukai
Sankukai
Niveau 10
17 juin 2008 à 14:37:47

C'est presque ça. ^^
En fait on n'appelle pas exec() directement, derrière lui se cache plusieurs fonctions aux prototypes différents à appliquer en fonction du besoin.

Dans ton cas un :
void
ping (char *url)
{
execl("/bin/ping", url);
}

répond à ton besoin.

Jette un oeil à toutes ces fonction (execl, execlp, execv, execvp, ...), tu verras ce qui convient le mieux.

Bien sûr ça marche aussi pour tes scripts.

mecafreezer5
mecafreezer5
Niveau 6
17 juin 2008 à 14:59:53

OK merci. J'ai testé vite fait ce programme, il compile mais quand je veux l'exécuter il me dit "permission denied", même quand je l'exécute en root.
Sachant que ping se lance avec les droits admin.
Une idée ???

chris_27
chris_27
Niveau 10
17 juin 2008 à 15:11:38

Tu as essayé avec /bin/ls à la place de /bin/ping pour voir si c'est bien un problème propre à ping ?

mecafreezer5
mecafreezer5
Niveau 6
17 juin 2008 à 15:19:01

Non je vien de me rendre compte que sa n'été pas ping le problème.
Meme un programme genre "hello world", il me dit permission denied.
J'ai réinstallé tous mon système récemment (sidux) et il ne veut plus exécuter mes programme.
D'ou peut venir ce problème ?

PS: je compile comme ca : gcc -c prog.c -o prog -Wall

Sankukai
Sankukai
Niveau 10
17 juin 2008 à 15:22:50

Regarde dans ton /etc/fstab si ta partition courante n'est pas montée avec le paramètre noexec.

Sinon je me suis fourvoyé dans mon exemple précédent, en voici un correct qui marche chez moi :

  1. include <unistd.h>

int
main(void)
{
execl("/bin/ping", "ping", "-c 3", "www.google.fr", (char *)NULL);
return 0;
}

++

mecafreezer5
mecafreezer5
Niveau 6
17 juin 2008 à 15:29:22

Oui j'ai lu que ca pouvait venir du fstab. Voici le mien:

  1. <filesystem> <mount point> <fstype> <mount options> <dump> <pass>

/dev/disk/by-uuid/C48C144E8C143CFC /media/disk1part1 ntfs auto,users,ro,dmask=0022,fmask=0133,nls=utf8 0 0

UUID=01fb7cf3-548a-453a-bad0-21402e3feeae / ext3 defaults,errors=remount-ro,noatime 0 1

UUID=640c605b-cecd-444b-b3f8-7018dbfe4ca2 /home ext3 defaults,noatime 0 2

UUID=c0abe07b-9430-456e-abb9-df76608508f5 none swap sw 0 0

/dev/cdrom /media/cdrom udf,iso9660 noauto,ro,users 0 0

Y a-t-il un problème ?
A savoir que je suis sur une archi 64 bits. Ca joue peut-etre ?

chris_27
chris_27
Niveau 10
17 juin 2008 à 15:50:04

"Y a-t-il un problème ? " :d) oui, j'aime pas les UUID. :o)) Sinon, tout est normal.

Effectivement, j'aurais du voir aussi qu'il manquait les arguments dans l'appel à la fonction execl :honte:

J'en profite pour corriger une chose dite précédemment. Il ne faut pas faire "man exec", mais "man 3 exec" pour avoir la bonne page de manuel.

mecafreezer5
mecafreezer5
Niveau 6
17 juin 2008 à 15:55:07

Donc si tout est normal comment ca se fait que je ne puisse pas exécuter mes programmes ??

Sankukai
Sankukai
Niveau 10
17 juin 2008 à 16:01:25

Il n'y a que tes programmes que tu ne peux pas exécuter ?

Si oui, peux-tu compiler le programme ci-dessus (appelons le toto.c) :
$ gcc -o toto toto.c
Et nous donner le résultat de :
$ ls -l toto

mecafreezer5
mecafreezer5
Niveau 6
17 juin 2008 à 16:07:11

Voila:
-rw-r--r-- 1 Bob Bob 1600 jun 17 16:04 tect

pourquoi n'est-il pas exécutable. Normalement j'ai pas de probleme de ce coté la.
Y a-t-il une solution pour régler le problème durablement (éviter que je me tape des chmod à chaque foi) ??

chris_27
chris_27
Niveau 10
17 juin 2008 à 16:08:17

Heu... tu es dans quel dossier là ? :doute:

Sinon, ma version du code :
http://pastebin.com/m68df2fa6

(j'ai fini par cédé... :( )

mecafreezer5
mecafreezer5
Niveau 6
17 juin 2008 à 16:15:31

Ba je suis dans mon /home. Mais nouveaux probleme. Aprés un
"chmod +x tect"

il me sort :

Bob@siduxbox:~/prog$ ./tect
bash: ./tect: cannot execute binary file

Je pense que c'est le fait que je sois en 64bits qui le fait raler.
Si vous arriver a confirmer, je suis bon pour me tapé toute une réinstallation.

chris_27
chris_27
Niveau 10
17 juin 2008 à 16:20:42

«Je pense que c'est le fait que je sois en 64 bits qui le fait raler. » :d) sans vouloir te vexer, tu dis de la merde là. :-)

C'est plutôt ton gcc le problème.

gcc -v ?

Sankukai
Sankukai
Niveau 10
17 juin 2008 à 16:22:09

Peux-tu nous donner aussi le résultat de :
$ file tect

Sankukai
Sankukai
Niveau 10
17 juin 2008 à 16:23:22

PS : Bah quoi, Chris_27, il était pas beau mon code ? :o))

mecafreezer5
mecafreezer5
Niveau 6
17 juin 2008 à 17:56:04

Je pense pas dire de la merde ca m'avait fait le coup pour compiler de l'ada.

Bob@siduxbox:~$ gcc -v
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.3.1-2'
--with-bugurl=file:///usr/share/doc/gcc-4.3/README
.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-cld --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.3.1 (Debian 4.3.1-2)

sinon:

Bob@siduxbox:~/prog$ file tect
tect: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

Voila merci a vous 2.

Sankukai
Sankukai
Niveau 10
17 juin 2008 à 18:03:58

Ton executable est bien au format ELF 64 bits, ce qui colle avec ton architecture. Il devrait donc pouvoir être exécuter normalement.

Ton gcc est correct aussi, il est juste super bleeding edge mais je ne pense pas que ce soit la cause du problème.

Pour info, le code que je t'ai donné plus haut compile et s'exécute correctement sur architecture x86_64. Donc la vérité est ailleurs ! :o))

Sinon tu ne m'as pas répondu tout à l'heure, tu rencontres ce problème uniquement avec les programmes que tu compiles toi même ou avec tous (firefox, ping, ls, etc.).
Si c'est qu'avec tes programmes tu peux essayer avec un gcc plus éprouvé (4.2.2 par exemple).

Si ça ne va pas mieux avec ça, je sèche, désolé. :/

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware