Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lancer un programme a partir d'un programme en C

Sujet résolu
    9 octobre 2021 à 18:09:38

    Bonjour, j'aimerais savoir si il est possible de lancer un programme a partir d'un autre en c sachant qu'il faut gérer le fait que cela doit être modulable, c'est a dire qu'il faut que ce soit l'utilisateur qui décide quel programme il faudra lancer. Il s'agit d'une commande DOS pour un projet de création d'un OS...

    J'ai vu sur le forum qu'il existait la commande ```system("start programme.exe")```, mais je ne suis pas sur que cela fonctionne ni de pouvoir la personnaliser pour mes besoins...

    Merci d'avance...

    Bonne soirée.

    -
    Edité par GeekTeam 9 octobre 2021 à 18:31:56

    • Partager sur Facebook
    • Partager sur Twitter
      9 octobre 2021 à 18:38:44

      Bonjour ! La fonction 'system' suppose que le système d'exploitation existe déjà !
      • Partager sur Facebook
      • Partager sur Twitter
        9 octobre 2021 à 18:39:48

        Merci pour cette réponse rapide ! Mais du coup, ça signifie qu'il faudrait que j'utilise quelle fonction?
        • Partager sur Facebook
        • Partager sur Twitter
          9 octobre 2021 à 19:01:01

          Alors, précises tes besoins.
          system() accepte une chaîne de caractères comme paramètre.
          Ça doit être une commande ou un programme reconnu par ton invite de commande ou ta console.
          exemple: system("echo Hello World!");
          Si tu es sur une distribution  Linux, il y a les variantes de la fonction exec*()
          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            9 octobre 2021 à 19:06:43

            Tout d'abord, c'est pour faire une commande DOS sur un OS from scratch, donc bon pour ce qui est du fait qu'elle doit être reconnue...
            • Partager sur Facebook
            • Partager sur Twitter
              9 octobre 2021 à 19:30:44

              Je suis sur Windows, donc je ne peux pas utiliser exec*()
              La fonction system() fonctionne très bien pour moi.
              Tu peux utiliser des commandes de DOS (moi c'est cmd) pour changer de répertoire et exécuter ensuite la bonne commande.

              -
              Edité par PierrotLeFou 9 octobre 2021 à 19:31:56

              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

                9 octobre 2021 à 19:42:49

                Encore une fois, le problème c'est que c'est une fonction destinée a être implémentée dans un OS Vierge, genre y'a que cette fonction pour ouvrir un programme... De plus, on est sur un OS from scratch et du coup pas sur linux, on est en train de faire un peu notre MS-DOS quoi.. J'espère que tu m'a a peu près compris, j'ai peur de ne pas être très clair...
                • Partager sur Facebook
                • Partager sur Twitter
                  9 octobre 2021 à 19:53:02

                  Mais puisque nous ne connaissonspas l'os (vu que tu le crées), comment veux-tu que nous te donnions une réponse correcte ?

                  -
                  Edité par edgarjacobs 9 octobre 2021 à 19:53:19

                  • Partager sur Facebook
                  • Partager sur Twitter

                  On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                    9 octobre 2021 à 19:59:38

                    Merci de me le rappeler :) Il est en grande partie constitué du code de CodePulse, mais on est en train de le modifier petit à petit.. Je vous envoie le lien du github et du discord si besoin . :)

                    Le discord (attention c'est un peu une dictature, faire respecter le règlement est une priorité, il est appliqué durement...): https://discord.gg/Y7NJS2xBtt

                    Le GitHub Contrib: https://github.com/Xabi08YT/GameOS-Contrib

                    Voila Voila, merci de vos réponses :)

                    Par contre un détail, on a notre propre complieur donc...... Et il ne fonctionne que sur linux Arch ou Linux Lubuntu...

                    -
                    Edité par GeekTeam 9 octobre 2021 à 20:05:05

                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 octobre 2021 à 20:05:50

                      en clair, si vous êtes en train d'écrire votre propre OS, c'est à vous de faire votre propre fonction system().

                      Pour chipoter, c'est pas directement une fonction du noyau, mais du côté de la bibliothèque de fonctions fournies à l'utiisateur.

                      en gros sous unix, system() c'est un lancement par fork + exec + wait de l'interpréteur de commandes (shell).

                      Un exemple : https://elixir.bootlin.com/uclibc-ng/v1.0.3/source/libc/stdlib/system.c

                      Si vous voulez faire la même chose, ben voila.

                      Bref, y a un moment, il va falloir que vous écriviez un bout de code qui charge en mémoire un exécutable pris dans un fichier et démarre son exécution. Bon courage.

                      -
                      Edité par michelbillaud 9 octobre 2021 à 20:11:25

                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 octobre 2021 à 20:13:11

                        Ah, alors petite question, peut-on prendre ce code ou il y a des copyrights? Merci pour cette piste, existe-t-il un moyen plus simple pour en faire un soi-même?

                        -
                        Edité par GeekTeam 9 octobre 2021 à 20:43:32

                        • Partager sur Facebook
                        • Partager sur Twitter
                          9 octobre 2021 à 20:36:32

                          Veuillez excuser mon ignorance, mais c'est quoi un complieur ? Ça fait la compilation et la liaison en même temps ? C'est cela ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                          ...
                            9 octobre 2021 à 20:44:45

                            Un compileur s'occupe de créer les liaisons entre les différents fichier du programme mais aussi traduit le langage utilisé en langage binaire pour que le processeur puisse le comprendre, voila voila...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 octobre 2021 à 21:08:14

                              "Ah, alors petite question, peut-on prendre ce code ou il y a des copyrights? Merci pour cette piste, existe-t-il un moyen plus simple pour en faire un soi-même?"
                              Et qu'est qui te pose soucis ?
                              Franchement dire qu'on fait un OS est passavoir  faire un truc pareil..

                              1) tu lis l'adresse en argument du path ,tu le lis dans ton système de fichier
                              2)tu charge ton programme en RAM
                              3) tu l’exécute ensuite (un simple call adresse en ram de mon zolie programme en monotache , ou alors tu le met dans ton ordonnanceur si il est multitache)
                              4) un shared memory éventuellement pour récupérer le retour de system (mais tu preux le recuperer seulement avec un registre ,si ton OS est monotache).

                              "Il s'agit d'une commande DOS"
                              Une raison particulière de reprendre les commandes DOS ?
                              Cela me semble plus logique de reprendre les commande UNIX mais bon..

                              -
                              Edité par HelbaSama 9 octobre 2021 à 21:10:47

                              • Partager sur Facebook
                              • Partager sur Twitter
                                9 octobre 2021 à 21:21:18

                                Hello,

                                sinon pour mieux comprendre ce qu'est un OS ⇒ http://index-of.es/Varios-2/Modern%20Operating%20Systems%204th%20Edition.pdf c'est un classique.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 octobre 2021 à 21:32:21

                                  Merci Merci pour vos réponses...

                                  "Une raison particulière de reprendre les commandes DOS ?
                                  Cela me semble plus logique de reprendre les commande UNIX mais bon.."

                                  Tu as peut-être raison, mais pour l'instant on fait un DOS qui sera le mode "Noyau" du système, le mode user sera une IUG où l'on va interdire les actions dangereuses comme le changement de certains protocoles, le mode noyau sera aussi présent en plus limité pour les petites machines, pour l'instant le tout tourne sur 4Mo de RAM, l'objectif est de consommer le minimum de RAM.

                                  Le problème étant que je viens de commencer et que je n'ai pas forcément toutes les notions mais nous sommes 4 sur le projet donc... Voila, on essaie de se répartir les tâches et pour ma défense, de base je programme en Java, python, JS et HTML/CSS, pas en C C++ et ASM...


                                  White Crow a écrit:

                                  Hello,

                                  sinon pour mieux comprendre ce qu'est un OS ⇒ http://index-of.es/Varios-2/Modern%20Operating%20Systems%204th%20Edition.pdf c'est un classique.

                                  Merci pour cette doc précieuse :) Elle est préférable a celle de Intel de 1464 pages 😂


                                  Sinon merci a tous pour vos réponses, pour plus de précisions il fout un Sheduler, pour les OS multitâches... 

                                  Lien Wikipédia: https://fr.wikipedia.org/wiki/Ordonnancement_dans_les_systèmes_d%27exploitation

                                  Je pense que nous pouvons considérer ce sujet comme clos.

                                  Encore Merci :)


                                  -
                                  Edité par GeekTeam 9 octobre 2021 à 22:15:21

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    10 octobre 2021 à 1:25:05

                                    @rouIoude:
                                    Je suppose que "complieur" est plutôt "compiler", le terme anglais pour "compilateur"
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Le Tout est souvent plus grand que la somme de ses parties.

                                      10 octobre 2021 à 15:17:19

                                      Oui en effet :) Désolé pour la faute....
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        10 octobre 2021 à 18:21:03

                                        Ok !

                                        Mais dans ce cas :

                                        GeekTeam a écrit:

                                        Un compileur s'occupe de créer les liaisons entre les différents fichier du programme mais aussi traduit le langage utilisé en langage binaire pour que le processeur puisse le comprendre, voila voila...

                                        Il compile les fichiers source, mais il ne fait pas les liaisons ! Les liaisons c'est le rôle du linker !

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        ...
                                          10 octobre 2021 à 18:59:44

                                          Il me semble que le PO a beaucoup de lacune dans l'informatique ce qui explique entre autre le mot "complieur" et que ça ne fait pas le link.

                                          D'ailleurs je me demande pourquoi refaire un compilateur , déjà qu'un OS c'est relativement long ,alors refaire un compilateur...

                                          "le mode noyau sera aussi présent en plus limité pour les petites machines, pour l'instant le tout tourne sur 4Mo de RAM"
                                          Ce n'est pas compliqué de faire tourner un OS 1 Mo ou moins , mais tout dépend de ce que doit faire l'OS surtout , plus tu veux qu'il a de fonctionnalité ,plus ça augmentera.

                                          -
                                          Edité par HelbaSama 10 octobre 2021 à 19:01:07

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            10 octobre 2021 à 19:27:05

                                            J'ai été voir le Github, et j'ai pris au hasard kernel.c dans /src.

                                            On y trouve les lignes

                                            #include "reboot.c"
                                            #include "pic.c"
                                            #include "cursor.c"
                                            

                                            M'est avis que le po est loin d'être sorti de l'auberge....

                                            -
                                            Edité par edgarjacobs 10 octobre 2021 à 19:36:55

                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                                              22 octobre 2021 à 22:11:18

                                              OOOh ca non... On a beau être 4 sur le projet on patine sur le Scheduler... C'est la m****
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                25 octobre 2021 à 19:09:53

                                                GeekTeam a écrit:

                                                OOOh ca non... On a beau être 4 sur le projet on patine sur le Scheduler... C'est la m****

                                                Un piste pour le scheduler. C'est totalement impossible d'écrire un scheduler préemptif en C, il va falloir utiliser l'assembleur. Un Sheduler ça doit agir sur la pile du processeur, ça n'a aucun sens dans une fonction!
                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                En recherche d'emploi.

                                                Lancer un programme a partir d'un programme en C

                                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                • Editeur
                                                • Markdown