Skip to content

Programmation Système : TP1 - Echauffement⚓︎


Programme avec Paramètres⚓︎

Exercice 1⚓︎

Ecrire un programme qui affiche ses paramètres puis les variables d’environnement de votre OS.

Solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>

int main (int argc, char *argv[], char *arge[])
{

    //Partie variables d'env


    printf ("Nombre d'arguments = %d\n", argc);
    for (i = 0; i < argc; i++)
        printf ("Argument %d : %s\n", i, argv[i]);

    printf ("Variables d'env:\n");

    i=0;
    while(arge[i]!=NULL)
    {
        printf ("Variable d'Env[%d]=%s\n",i,arge[i]);
        i++;
    }

    return 0;
}

Exercice 2⚓︎

Ecrire un programme de calculatrice simple, qui prends deux nombres ainsi que l'opérateur en paramètres.

Solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>

int main (int argc, char *argv[], char *arge[])
{
    //Partie Calculette
    int o1,o2;
    char op;
    int res;
    int i =0;

    if(argc!=4)
    {   
        printf("\tJ'attends 3 arguments passés au programme !\n");
        exit(0);
    }

    o1=atoi(argv[1]);
    o2=atoi(argv[3]);
    op=*(argv[2]);

    switch(op)
    {   
        case '+':
            res=o1+o2;
        break;
        case '-':
            res=o1-o2;
        break;      
        case '*':
            res=o1*o2;
        break;      
        case '/':
            res=o1/o2;
        break;
        default:
            printf("erreur d'operande\n");  
    }       
    printf("res=%d\n",res); 

    return 0;
}

Zombie War⚓︎

Exercice 3⚓︎

  1. Ecrire un programme en C qui créer deux processus et qui met en valeur le phénomène des processus zombie.
Solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>

int main(void)
{
    pid_t pid;
    pid = fork();
    if(pid==-1)
    {
            printf("Error on fork\n");
            exit(-1);
    }

    if (pid == 0)
    {
        printf("FILS :  mon pid = %d et celui de mon pere est %d \n",getpid(), getppid());
        sleep(10);
        printf(">>> mort du fils \n");  
    }
    else
    {
        printf(" PERE : mon pid = %d, j'attends la mort de mon fils\n",getpid());
        sleep(20); //Pendant 10 sec on observe le zombie ...    
        exit(0);
    }
}
  1. Le corriger pour le rendre « propre » !
Solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>

int main(void)
{
    pid_t pid;
    pid = fork();
    if(pid==-1)
    {
            printf("Error on fork\n");
            exit(-1);
    }

    if (pid == 0)
    {
        printf("FILS :  mon pid = %d et celui de mon pere est %d \n",getpid(), getppid());
        sleep(10);
        printf(">>> mort du fils \n");  
        exit(0);
    }
    else
    {
        printf(" PERE : mon pid = %d, j'attends la mort de mon fils\n",getpid());
        wait(NULL);
        printf ("Pere : j'ai recut la mort de mon fils, je peux mourir en Paix. RIP.\n");   

        sleep(10); // Pendant ces 10 sec, on n'observe PLUS de Zombie :) 

        exit(0);
    }
}