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 ;-)
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...
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...
> 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...
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
[^]Re: Un complément...
Ca se règle. unsetopt hup dans zsh.