vue
Solimar Messages : 26 | Sujet résoluBonjour, Je créé cette discussion dans l'espoir de trouver de l'aide sur un problème qui me paraît assez bizarre... Je réalise actuellement un programme en langage C, pour de la programmation système sous linux. Le but est actuellement d'utiliser les appels système tel que fork, open, etc. Voici le résumé du programme :
C'est sur dernier point que cela coince. En effet, mon code fonctionne bien (les printf "écrivent" bien dans le fichier les informations voulues), jusqu'à que je rajoute la ligne du execl (Cf. code ci-dessous). En effet, lorsque je lance le programme avec la fonction execl, son résultat s'écrit bien dans le fichier, mais en "m'écrasant" les lignes écrites par les printf ! Si j'ai par exemple deux fils, cela m'écrira bien dans le fichier deux fois le résultat de la commande ps dans le fichier... J'avoue ne pas comprendre le phénomène. Je vous serai donc reconnaissant de m'éclairer et de me donner une piste pour résoudre ce problème si vous le voulez bien Mon fichier .c : #include <errno.h> Le contenu du fichier de résultat sans la ligne execl : Clique pour afficher la zone invisible Fermer ce cadre Je suis le numéro 1, j'ai le PID 6451 et je vais dormir 4 secondes. Je me termine, je suis le numéro 1, j'ai le PID 6451. Login : user - UID réel : 1000 - UID effectif 1000 Statut : Durée totale de l'execution : 2 secondes. Le contenu du fichier de résultat avec la ligne execl : Clique pour afficher la zone invisible Fermer ce cadre PID COMMAND STAT 5214 bash Ss 6612 TP1_EX1_Qe S+ 6613 ps R+ Durée totale de l'execution : 2 secondes. |
lundi 16 septembre 2013 (Dernière édition mardi 17 septembre 2013)
| |
Homer Messages : 1925 | En gros quand tu lance le execl, les printf de ta fonction codeDuFils sont écrasés par celle du execl, donc faudrait que tu lance le execl dans une autre fonction pour avoir tout ça d'afficher. Sinon tu as essayé de mettre execl avant les printf ?
|
mardi 17 septembre 2013
| |
Solimar Messages : 26 | Bonsoir, Merci bien pour ta réponse. Je suis d'accord sur le fait que le execl effectue un recouvrement sur le processus fils, mais celui-ci n'intervient que lors du execl, donc en théorie les printf ne devraient-ils pas s'exécuter avant le recouvrement ? Sinon oui en mettant le execl avant les printf, cela effectue le recouvrement dès le début de la fonction, de ce fait le sleep n'est pas effectué. Au contraire, en laissant l'execl où il est actuellement situé, le sleep est bien réalisé. Edit : je viens de faire un test, et on dirait que le recouvrement s'effectue sur tout le code, et pas seulement sur ce qui suit.. Si quelqu'un pouvait me le confirmer Je vais tester une manière de faire, et je refait un edit pour vous tenir au courant. Edit 2 : Bon, en fait le recouvrement est également actif sur les instructions (hors appels systèmes) situées avant l'appel d'exec. Je ne sais pas pourquoi, je croyais l'inverse Merci à toi homer de t'être penché sur mon problème ! Sujet résolu ! |
mardi 17 septembre 2013 (Dernière édition mardi 17 septembre 2013)
| |
Homer Messages : 1925 | ça faisait longtemps que je ne mettais pas pencher sur un programme en C |
mardi 17 septembre 2013
|
Aperçu (pas encore publié) | |
Kommunauty © Tous droits réservés
Contact /
Charte & Mentions légales /
Hebergement gratuit /
Bon plan hébergement /
Aide B2i