Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Programmation.c : Questions d'exam

Posté par Snacksou () le 24 juin 2007
Bonsoir à tous,



je passe à la repêche un examen de programmation système (demain matin 8h30...) et nous n'avons pas eu de correction de l'exam de première session. J'ai donc quelques questions à vous poser :)



Exercice 1

Repondre par vrai ou faux:

1/ un processus dont le propriétaire est 1000 à les droits de l'utilisateur 1000.



2/Une ecriture sur un tube sans lecteurs en mode bloquant provoque l'envoi du signal SIGPIPE au processus ecrivain, même si celui-ci a la place d'ecrire dans le tube.



3/ Un processus n'effectuant aucun appel systeme n'est pas interruptible par un signal, car les signaux ne sont délivrés que lors du passage en mode noyau.



4/ La terminaison d'un processus provoque la terminaison de tous ses fils.



5/ En général, un shell interactif ignore ou install son propre traitant pour le signal SIGINT.



6/ En terme d'espace disque, la création réussie d'un lien physique (par le shell: ln titi toto ou par l'appel link) est plus couteuse que la création réussie d'un lien symbolique.





Exercice 2

Répondre briévement:

1/Expliquer pourquoi il est en général préférable d'utiliser les fonctions d'entrées-sorties de haut niveau plutot que celle de bas niveau?



2/ Qu'est-ce qu'une fonction réentrante? Illustrer sur un exemple le type de problème que peut poser l'utilisation de fonctions non réentrantes.



3/ Quelle différence y'a-t-il entre attente active et attente passive? Donner un exemple de chacune des deux.





Exercice 3

On suppose que rep est un répertoire appartenant à l'utilisateur qui lance les commandes suivantes:

$ bin/ls rep

titi toto

$bin/ls -l rep

ls: titi: permission denied

ls: toto: permission denied

On supose que les permissions n'ont pas changé entre les 2 commandes.

1/ Quels appels systèmes ou bibliothèque pourrait-on utiliser pour ecrire un programme dont le lancement équivaut à ls rep? Quels sont les permissions nécessaire pour que cette commande réussise?



2/ Même questions pour la commande ls -l rep



3/ Que peut-on en déduire pour les permissions positionnées sur le répertoire rep?





Merci à tous pour votre aide ;-)

> Lire le message (21 commentaires, moyenne: 1,7).  

Vous avez demandé le commentaire #845074.

Un complément...

Posté par philippe G. (page perso, ) le 25/06/2007 à 08:22. (lien). Évalué à 3.

Bonjour,

4/ La terminaison d'un processus provoque la terminaison de tous ses fils.

Non, les fils deviennent fils d'init (sauf si c'est init lui-même qui est 'terminé')

2/ Qu'est-ce qu'une fonction réentrante?

Une fonction réentrante est une fonction que l'on peut appeler dans un contexte multi-thread (par exemple), ou qui peut être appelée récursivement.
Une fonction réentrante alloue un espace distinct pour ses variables locales (en général dans la pile) à chaque appel.

  • [^]Re: Un complément...

    Posté par kesako () le 25/06/2007 à 09:51. (lien). Évalué à 1.

    > Une fonction réentrante alloue un espace distinct pour ses variables locales (en général dans la pile) à chaque appel.
    pas seulement.
    une fonction non-reentrante stock souvent les resultats dans une meme structure . donc si elle est appelée plusieurs fois au meme moment , les resultats peuvent etre ecrasés.

    le fonctions autour de time sont l'exemple le plus frequent et le plus connues :
    struct tm *localtime(const time_t *timep);
    struct tm *localtime_r(const time_t *timep, struct tm *result);

    les _r sont reentrantes car on fournit un pointeur struct tm *result sur une zone memoire alouee pour y stocker le resultat.

    [^]Re: Un complément...

    Posté par NeoX () le 25/06/2007 à 10:12. (lien). Évalué à 1.


    4/ La terminaison d'un processus provoque la terminaison de tous ses fils.

    Non, les fils deviennent fils d'init (sauf si c'est init lui-même qui est 'terminé')



    pourtant tu ouvres un ligne de commande (bash/sh/...)
    tu ouvres un programme depuis cette ligne de commande (firefox, amorok ou autre)

    tu fermes la ligne de commande
    ben ca ferme ton firefox :-/

    evidemment si tu met ton programme en tache de fond (& ou ctrl+z suivi de bg X) il devient alors independant du shell

    --
    Apprendre par les autres, c'est bien.
    Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux