Laboratoire 2
Sommaire
L’objectif de ce laboratoire est de programmer avec des appels systèmes et de regarder les comportements.
Bibliothèques C
Développer un programme prime
qui calcule en C le nombre de nombres premiers inférieurs ou égaux au nombre passé en argument.
$ ./prime 5
3
$ ./prime 50
15
$ ./prime 10000000
664579
Vous utiliserez l’algo suivant (crible d’Ératosthène) :
#include <math.h>
long int argument; // Argument du programme
long int* primes; // Tableau de nombres premiers trouvés (à allouer dans le tas et réallouer)
size_t nb; // Nombre de nombres premiers trouvés
for (long int i=2; i<=argument; i++) {
int prime = TRUE;
for (size_t k=0; k<nb; k++) {
long int j = primes[k];
if (j>sqrt(i)) {
break; // on trouvera plus de diviseur, inutile de continuer de chercher
}
if (i%j == 0) {
prime = FALSE; // c'est divisible, donc pas premier
break;
}
}
if (prime) {
// on enregistre et passe au nombre suivant
primes[nb] = i; // Réalouer peut-etre
nb++;
}
}
print(nb); // et voila!
- Note: pour calculer la racine carrée
sqrt
il est nécessaire d’utilisermath.h
et de compiler avec-lm
. N’oubliez pas le cast versdouble
pour l’argument de la fonctionsqrt
. - Note: Pour transformer la valeur lue en entier, vous pouvez utiliser
strtol
Questions ?
- Pourquoi
-lm
est nécessaire pour compiler ? - Dans quel fichier et la bibliothèque mathématique ?
- Est-ce que
sqrt
est un appel système ? Sinon, comment est fait le calcul de la racine carrée ?
Strace
Babel
Développez un programme qui affiche « Hello, World!
» dans au moins 2 langages de programmation différents (C, C++, Java, Python, Bash, etc.) et exécutez-le avec strace
.
- Que constatez-vous ?
- Cherchez l’appel système
write
(ou un appel système équivalent) utilisé pour afficher le « hello world ». (aide: manstrace
)
Tubes et redirections
Les tubes |
et les redirections >
sont des outils puissants du shell.
Comparez le comportement de strace
d’un programme hello-world avec
- une redirection dans un fichier
- avec un tube «
| cowsay
»
Variété
Exécuter strace -tf
sur les commandes suivantes (installez les programmes si nécessaires)
sleep 5
./prime
(le programme de la question précédente)find /usr/lib
xeyes
(ou toute autre application graphique interactive)mpv mamusique.mp3
(ou tout autre lecteur audio ou vidéo)
Questions
- Combien d’appels système sont faits par ces programmes ?
- Est-ce des programmes qui font beaucoup d’entrées-sorties ou beaucoup de calcul ?
- Quels sont les appels systèmes les plus utilisés par ces programmes (
man strace
) ? Essayez de ne pas prendre en compte les appels système utilisés avant le début dumain
.