Contenu | Rechercher | Menus

Annonce

T-shirt Seiche Cosmic, Série limitée

L'équipe des administrateurs et modérateurs du forum vous invite à prendre connaissance des nouvelles règles.
En cas de besoin, vous pouvez intervenir dans cette discussion.

Ubuntu 18.10
T-shirt Ubuntu-FR « Seiche Cosmique » en série limitée ! Prix spécial pré-vente (15€) jusqu'au 4 novembre 2018.

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 08/01/2018, à 17:48

jean-luc5629

[C] Poursuite de l'exécution du script après un exec ou system

Bonjour,

Je ne sais pas si j'ai posté dans le bon topic, j'ai hésité entre (lignes de commande) et (développement), mais comme dans le 1° on retrouve plus des sujets bash, je le fais ici; si il n'est pas à la bonne place, je n'en voudrais pas qu'il soit déplacé.

J'utilise parfois sous linux un petit scipt C pour pouvoir lancer une commande particulière sous root "setuid (0);" même si aussi possible via sudoers; mais mes connaissances sous C sont minuscules, c'est plus en me basant sur des exemples du net que j'y arrive; je saisis mieux le bash sans être un as comme certains ici !!!

Basé sur ce principe et de ce minimum de connaissances, j'ai voulu faire un petit programme sous C pour lancer un programme sous un poste windows; il fonctionne; mais presque !!! sinon je ne viendrais pas solliciter votre aide.

Voici un extrait (j'ai coupé certaines lignes (./..) sans importances dans ce que je recherche :

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int
main(int argc, char *argv[])
{
char *arguments[] = { "progr.exe", "argument1", "argument2", NULL };
./..
    execv(".\\windir\\progr.exe", arguments);
    remove(".\\windir\\file1.dat");
    remove(".\\windir\\file2.bnd");
return 0;
exit(0);
}

Mon progr.exe se lance bien avec ses arguments, mais file1 et file2 ne sont pas supprimés après le lancement; alors que si je supprime la ligne de lancement de progr.exe, file1 et file2 sont bien supprimés.

J'ai tenté plusieurs commandes de la famille "execxx" et même "system" sans succès, j'aurais voulu comme en bash avec "&" suivant la commande que le programme soit lancé :

/usr/local/bin/commande.sh &
./.. #mon script continue de s'éxécuter

Mais qu'une fois lancé le script continue à éxécuter les lignes restantes : (remove) dans le cas du programme C plus haut.

Merci d'avance.

En ligne

#2 Le 10/01/2018, à 02:44

DonutMan75

Re : [C] Poursuite de l'exécution du script après un exec ou system

Bonsoir jean-luc5629,
effectivement les deux lignes remove() ne seront jamais exécutées... et c'est le comportement attendu de la famille de fonction "execxx"

man execv a écrit :

La  famille  de fonctions exec remplace l'image mémoire du processus en cours par un nouveau  processus.

En revanche, ce n'est pas ce qui devrait se produire avec la fonction system()...

man system a écrit :

La fonction system() exécute la commande indiquée dans commande en appelant /bin/sh -c commande, et revient après l'exécution complète de la commande.

Peux-tu nous donner un retour d'éxécution plus détaillé avec system() ? Par exemple en plaçant des fprintf() un peu partout pour le débuggage ?

Et puis aussi, je ne comprends pas quel est l’intérêt de ce code sous Windows ?? Ils ont des politiques utilisateurs similaires à Linux ?

Pour terminer, une remarque concernant ta phrase :

jean-luc5629 a écrit :

J'utilise parfois sous linux un petit scipt C pour pouvoir lancer une commande particulière sous root

>> Je ne suis pas expert en C, mais il me semble avoir lu que c'était très dangereux de fonctionner comme cela.
En effet, un intrus pourrait modifier le PATH pour mettre en tout premier un répertoire contenant un progr.exe de son cru... Ce faisant, l’exécution de ton programme lui permettrait d'exécuter n'importe quel code arbitraire sous root !
Est-ce que c'est toujours gênant si on précise le chemin absolu de l'exécutable ? Je l'ignore...

Bonne soirée et à bientôt

Donut

Hors ligne