• Aucun résultat trouvé

Partie1:compilationetfonctions TPn 2ProgrammationC(r´evisions) Universit´eParisDiderot–Paris7Programmationr´eseauxL3InformatiqueAnn´ee2012-2013,2 semestre

N/A
N/A
Protected

Academic year: 2022

Partager "Partie1:compilationetfonctions TPn 2ProgrammationC(r´evisions) Universit´eParisDiderot–Paris7Programmationr´eseauxL3InformatiqueAnn´ee2012-2013,2 semestre"

Copied!
2
0
0

Texte intégral

(1)

Universit´ e Paris Diderot – Paris 7 Programmation r´ eseaux L3 Informatique Ann´ ee 2012-2013, 2

`eme

semestre

TP n

2

Programmation C (r´ evisions)

Partie 1 : compilation et fonctions

#include <stdio.h>

int main(void) {

printf("Hello World!!!\n");

return 0;}

Ce programme est sauvegard´e dans le fichier hello.c . Pour cr´eer un fichier ex´ecutable, le plus simple consiste en la commande :

$ gcc hello.c

Cette commande effectue l’ensemble des phases de la compilation et cr´ee le fi- chier ex´ecutable a.out . Avec l’option -o nous pouvons sp´ecifier le nom du fichier ex´ecutable :

$ gcc -o hello hello.c

Ici le programme ex´ecutable est hello . Une autre possibilit´e, utile lors de compi- lation s´epar´ee, est de passer par l’interm´ediaire de fichiers objets (*.o) :

$ gcc -c hello.c

$ gcc -o hello hello.o

L’option -Wall permet d’afficher tous les messages de warnings. Il est recommand´e de prendre en compte ces messages afin d’avoir les bonnes habitudes de program- mation en C.

$ gcc -Wall -o hello hello.c Exercice 1

Ecrire un programme qui saisit 2 entiers et affiche successivement la somme, ´ la diff´erence, le produit, les quotients de la division r´eelle et euclidienne et le reste de la division euclidienne de ces 2 entiers.

Exercice 2

Ecrire deux programmes retournant la factorielle, calcul´ee respectivement de ´ fa¸con it´erative et r´ecursive, d’un nombre entier entr´e par l’utilisateur.

1

(2)

Partie 2 : fonction, allocation de m´ emoire et pointeur Exercice 3

Soit P un pointeur qui ’pointe’ sur un tableau A : int A[] = {12, 23, 34, 45, 56, 67, 78, 89, 90};

int *P;

P = A;

Quelles valeurs ou adresses fournissent ces expressions : 1. P

2. &A 3. &P 4. *P+2 5. *(P+2) 6. &P+1

7. P+1 8. &A[4]-3 9. A+3

10. P+(*P-10)

11. *(P+*(P+8)-A[7])

Si on rajoute l’instruction ++P; ` a la fin du code pr´ec´edent, quelle adresse est fournie par P ? Si on rajoute l’instruction ++A;, qu’est-ce qu’il se passe ?

Exercice 4

– Ecrivez une fonction ´ int toInt(char* s) qui convertit la chaˆıne de ca- ract`eres ascii s en un entier. On consid`ere que s repr´esente un nombre entier positif.

– Ensuite ´ecrivez un programme demandant ` a l’utilisateur de saisir au clavier un entier positif d’au plus 6 chiffres et qui le traduira en appelant la fonction toInt. Ce programme devra utiliser un pointeur vers char et une allocation dynamique pour stocker la chaˆıne de caract`eres.

Partie 3 : Big-endian et little-endian

Dans une architecture big-endian, les octets sont conventionnellement num´erot´es de la gauche vers a droite. Dans le mode big-endian les octets de poids fort sont plac´es en tˆete et occupent donc des emplacements m´emoire avec des adresses plus petites. Dans une architecture little-endian, c’est le contraire.

Le protocole IP d´efinit un standard, le network byte order (soit ordre des octets du r´eseau). Dans ce protocole, les informations binaires sont en g´en´eral cod´ees en paquets, et envoy´ees sur le r´eseau, l’octet de poids le plus fort en premier, c’est-` a-dire selon le mode big-endian et cela quel que soit l’endianness naturel du processeur hˆ ote.

Exercice 5

Ecrire un programme qui teste si votre machine fonction en Big-endian ou ´ Little-endian. Une solution est de v´erifier l’octet de poids faible d’un entier donn´e.

Exercice 6

Ecrire un programme qui lit un entier (en 32 bit) et qui affiche sa repr´esentation ´ hexad´ecimale en big endian et little endian. Pour cela utilisez une des fonctions vue en cours.

2

Références

Documents relatifs

Pour cela le client demande la d´efinition d’un mot au serveur et celui-ci lui renvoie le texte obtenu par l’appel ` a l’utilitaire dict. Si dict ne trouve pas de d´efinition,

Modi- fiez votre serveur pour que apr`es avoir v´erifi´e que le chemin de la requˆete com- mence par ”/” et ne contient pas la chaˆıne ”/../” 1 , il retourne au client le

Lancez la commande nc avec l’option -l 8080, cela ouvre un serveur sur votre machine locale sur le port 8080.. Tapez une ligne dans

Les hints prennent aussi le forme d’une structure addrinfo : vous pouvez indiquer des restrictions sur le type de socket que vous souhaitez utiliser (si vous n’avez aucune

Pour cela vous pouvez utiliser la commande telnet (usage : telnet machine service o` u service peut ˆetre soit le num´ero de service soit le nom du service)1. D´eterminez le

Dans ce protocole, les informations binaires sont en g´en´eral cod´ees en paquets, et envoy´ees sur le r´eseau, l’octet de poids le plus fort en premier, c’est-` a-dire selon le

Ecrivez un programme Java ´ jdaytime qui se connecte au service daytime d’une machine donn´ ee en param` etre et r´ ecup` ere la date pour l’afficher ` a l’´ ecran.. Exercice

L’id´ee est la suivante : un client producteur envoie au serveur une chaˆıne de caract`eres qu’il aura re¸cu par l’entr´ee standard (le clavier), le serveur stocke alors