Vous êtes sur la page 1sur 6

Durée totale : 2h

Exercice 1 : C
Internet et github sont autorisés.

Écrire un programme en C à l’aide de libev (ou libevent2) afin de créer un client/serveur avec
UDP comme transport. Le client devra envoyer un tableau d’entier (16 bits) aléatoire et de
longueur aléatoire variant de 10 à 20 entier au serveur. Ce dernier devra trier le tableau et
afficher le résultat. Un script de compilation (Makefile ou un simple script bash) est attendu.
Envoyer le résultat de votre travail dans une archive au format .tar.gz​.

http://software.schmorp.de/pkg/libev.html
https://libevent.org/
https://github.com/solderjs/libev-examples/blob/master/src/udp-echo-server.c
https://linux.die.net/man/3/ev
http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod
Durée totale : 2h

Exercice 2 : C
​Internet est autorisé.

Quel est l'ordre de la libération mémoire ?


{ struct​ sample​{
int​ i​;
float​ f​;
char​ ​*​str​;
};
struct​ sample ​*​s ​=​ ​NULL​;
s ​=​ ​(​struct​ sample​*)​calloc​(​1​,​ ​sizeof​(​struct​ sample​));
s​->​str ​=​ ​(​char​*)​calloc​(​20​,​ ​sizeof​(​char​));
/* ... (free ?) ... */
return​ ​0​;
}

□​ ​La structure puis le tableau de char


□​ ​Le tableau de char puis la structure
□​ ​Peu-importe, c'est la même chose
□​ ​Dans ce cas, pas besoin de libérer la mémoire

Que fait cet algorithme ​?

int​ f1​(​int​ ​*​a​,​ ​int​ b​,​ ​int​ c​,​ ​int​ d​){


​if​(​c ​<​ b ​||​ a ​==​ ​NULL​)
return​ ​(​int​)​ ​-​1​;
​int​ e ​=​ ​(​b ​+​ c​)​ ​/​ ​2​;
​if​(​a​[​e​]​ ​==​ d​)
return​ ​(​int​)​ e​;
​else​ ​if​(​a​[​e​]​ ​>​ d​)
c ​=​ e ​-​ ​1​;
​else​ ​if​(​a​[​e​]​ ​<​ d​)
b ​=​ e ​+​ ​1​;
​return​ ​(​int​)​ f1​(​a​,​ b​,​ c​,​ d​);
}
Durée totale : 2h

Quelle est l'erreur dans le code suivant ?

struct​ s1 ​{
int​ i​;
float​ f​;
struct​ s1 s​;
};

Y​-​a​-​t​-​il une erreur​,​ si oui la corriger et dire ce qu'affiche le programme ?

int​ f1​(){
return​ ​(​int​)​ printf​(​"Kikoo mon kikoo"​);
}
void​ f2​(​int​ ​(*​f​)()){
if​(​f​){
(*​f​)();
}
}
int​ main​(){
int​ ​(*​fff​)();
fff ​=​ f1​;
f2​(​fff​);
return​ ​(​int​)​ ​0​;
}
Durée totale : 2h

Qu'affiche le code suivant ?


void​ f1​(​int​ ​*​x​,​ ​int​ y​)
{
int​ i​;
for​(​i​=​0​;​ i ​<​ y​;​ i​++)
*(​x​+​1​)​ ​=​ ​*(​x​+​i​)+​5​;
}
int​ main​(){
int​ i ​=​ ​0​;
int​ a​[]​ ​=​ ​{​2​,​ ​4​,​ ​6​,​ ​8​,​ ​10​};
f1​(​a​,​ ​5​);
for​(;​ i ​<​ ​5​;​ i​++)
printf​(​"%d "​,​ a​[​i​]);
printf​(​"\n"​);
return​ ​0​;
}

□​ ​3 5 7 9 11
□​ ​2 15 6 8 10
□​ ​ 7 9 11 13 15
□​ ​2 4 6 9 15
Durée totale : 2h

Exercice 3 : Culture Informatique


Internet et Wikipedia sont autorisés (mais pas les copier-collers).

1.​ ​Qu’est-ce qu’une fonction réentrante ?


2.​ ​Quelle est la différence entre un thread et un fork ?

3. Qu’est-ce que BGP ?


4. Qu’est-ce que GDB ? ​Donner (au minimum) deux autres exemples.
5. Qu-est-ce que le NewSQL ?
6. Enigme : Pourquoi les ingénieurs confondent Halloween et Noël ?
Durée totale : 2h

Exercice Bonus : Lecture Frame


​Internet est autorisé.

0000 36 65 37 63 65 64 00 10 db ff 10 00 08 00 45 68
0010 00 78 d5 cf 40 00 fb 84 f0 c5 c2 d9 af e1 b4 3d
0020 5c e7 10 ba 16 53 78 ec 06 5e 4a ac 94 45 00 03
0030 00 58 00 00 69 44 00 01 04 4c 00 00 00 03 01 00
0040 01 01 00 00 00 48 02 10 00 3d 00 00 16 53 00 00
0050 10 ba 03 00 00 0d 09 80 03 0e 19 0b 12 08 00 12
0060 04 62 62 93 03 99 09 0b 12 08 00 12 04 23 30 10
0070 21 00 68 0f 64 0d 49 04 30 0f 69 c9 6c 05 a2 03
0080 02 01 01 00 00 00

On a retiré de cette trame le préambule, le début de la trame et le CRC.

1.​ ​Quelle est le type de trame, Ethernet II ou 802.3 ? Justifier.


2.​ ​Quelle est l’adresse physique de la machine source ?

3. Donner l’adresse IP de la machine destination en hexadécimal et en décimal.


4.​ ​Bonus : Quel est le protocole au-dessus de la couche 4 ?

Annexes :
https://en.wikipedia.org/wiki/IEEE_802.3
https://en.wikipedia.org/wiki/Ethernet_frame
https://en.wikipedia.org/wiki/Transmission_Control_Protocol
https://en.wikipedia.org/wiki/User_Datagram_Protocol
https://en.wikipedia.org/wiki/Stream_Control_Transmission_Protocol
https://www.iana.org/assignments/sctp-parameters/sctp-parameters.xhtml
https://tools.ietf.org/html/rfc4960
https://tools.ietf.org/html/rfc793
https://tools.ietf.org/html/rfc768

Vous aimerez peut-être aussi