Outils pour utilisateurs

Outils du site


exercices:debut

Table des matières

Voici les données initiales pour réaliser les TP M3101.

TP1

Voici les codes fourni en TD1 :

Pour la question “Mise en place des sémaphores”, utilisez les codes fournis dans le cours pour les programmes : mknamedsem.c, namedsemp.c, namedsemv.c et rmnamedsem.c.

Les question “Application au carrousel” et “Application lecteur/écrivains” ne seront pas notés.

Pour visualiser une trotteuse, utilisez l'option “-update 1” de xclock.

TP2

Utilisez les entêtes :

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <linux/byteorder/little_endian.h>

Même un source C peut être compilé avec “g++” (pour pourvoir utiliser la syntaxe ANSI-C).

Regardez la documentation des fonctions :

       FILE *fopen(const char *path, const char *mode);
       void perror(const char *s);
       int sscanf(const char *str, const char *format, ...);
       int fseek(FILE *stream, long offset, int whence);
       size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
       int fprintf(FILE *stream, const char *format, ...);

minixstructure.c

td2.minixfs.zip

Pour voir le fichier en hexadécimal utilisez emacs et la commande : M-x hexl-mode (Esc-x suivi de hexl-mode)

Exemple de code c

#include <stdio.h>
#include <stdlib.h>
 
int
main (int argc, char** argv, char** envp) {
	fprintf (stdout, "Hello World\n");
	return 0;
}

Exemple de compilation

$ gcc test.c
$ ./a.out
#include <stdio.h>
#include <stdlib.h>
 
int
main (int argc, char** argv, char** envp) {
	FILE *file = fopen (argv[1], "r");
 
	for (int i = 2; i < argc; i++) {
		int adresse;
		sscanf (argv[i], "%x", &adresse);
		fprintf (stdout, "convert 0x%x = %d\n", adresse, adresse);
	}
	return 0;
}
$ gcc test.c
$ ./a.out td2.minixfs 0x20 0x40
#include <stdio.h>
#include <stdlib.h>
 
struct S {
   int a;
   int b;
};
 
int
main (int argc, char** argv, char** envp) {
	FILE *file = fopen (argv[1], "r");
	fseek (file, 0x1000, SEEK_SET);
 
	int n = 3;
	struct S tab [n];
 
	fread (tab, sizeof (struct S), n, file);
 
	for (int i = 0; i < n; i++)
		fprintf (stdout, "a: 0x%x b: 0x%x\n", tab[i].a, tab[i].b);
	return 0;
}

TP4

Exemple de code pour dessiner dans un JPanel.

public class Panneau extends JPanel {
  public Panneau (int width, int height) {
    this.width = width;
    this.height = height;
    Dimension size = new Dimension (width, height);
    setMinimumSize (size);
    setPreferredSize (size);
    setDoubleBuffered (true);
  }
 
  public synchronized void update () {
    repaint ();
  }
 
  public void paint (Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    g2.setBackground (Color.WHITE);
    g2.clearRect (0, 0, width, height);
 
    g2.setColor (Color.GREEN);
    g2.fillRect (10, 10, 100, 100);
 
    // ...
    //g2.setColor (rectangle.color);
    //g2.fillRect (rectangle.x, rectangle.y, rectangle.width, rectangle.height);
  }
}

Exemple de code pour tester un objet graphique.

public static final void testComponent (final String title, final Component component) {
  SwingUtilities.invokeLater (new Runnable () {
    public void run () {
      JFrame jFrame = new JFrame (title);
      jFrame.addWindowListener (new WindowAdapter () {
        public void windowClosing (WindowEvent e) {
          System.exit (0);
        }
      });
      jFrame.getContentPane ().add (component, BorderLayout.CENTER);
      jFrame.pack ();
      Dimension screenSize = Toolkit.getDefaultToolkit ().getScreenSize ();
      Dimension size = jFrame.getSize ();
      jFrame.setLocation ((screenSize.width - size.width)/4, (screenSize.height - size.height)/4);
      jFrame.setVisible (true);
    }
  });
}

TP5

Pour le TP, vous devez télécharger tp5.zip

Après décompression de l'archive vous obtenez :

Classes utiles pour le TP5 :

tp5/
├── jar
│   └── tp5.jar
├── src
│   └── tp5
│       └── GameNetParse.java
└── ws
    ├── compile.sh
    └── launch.sh

Vous devez écrire la classe GameNetParse.java.

Le lancement du programme consiste dans le test suivant :

public class TestParse {
 
    static String[] msgs = {
	"140824 07:09:30 alice: guest bob", // execGuestArg
	"140824 07:09:31 alice: guest grpA:bob", // execGuestArg
	"140824 07:09:32 alice: guest grpA:", // execGuestArg
	"140824 07:09:33 bob: welcome alice@10.0.0.1:8080", // execWelcomeArg
	"140824 07:09:34 alice: welcome bob@10.0.0.2:8081 chalie@10.0.0.1:8082", // execWelcomeArg
	"140824 07:09:35 alice: send 10.0.0.1:8080-A", // execLetterArg
	"140824 07:09:36 alice: answer 10.0.0.1:8082-C", // execLetterArg
	"140824 07:09:37 alice: reject 10.0.0.1:8080-A", // execLetterArg
	"140824 07:09:38 alice: close", // execNoArg
	"140824 07:09:39 bob: full", // execNoArg
	"140824 07:09:40 bob: done 10.0.0.2:8081-[ACD] 10.0.0.2:8082-[BD] 10.0.0.2:8083-F" // execLettersArg
    };
 
    static public void main (String[] arg) {
	Game game = new Game ();
	GameNetParse gnp = new GameNetParse (game);
	for (String msg : msgs) {
	    gnp.parse (msg);
	    System.err.println ();
	}
    }
}

L'objectif du TP est de réaliser l'analyse des lignes précédentes.

TP6

Pour le TP, vous devez télécharger tp6.zip

Après décompression de l'archive vous obtenez :

tp6/
├── jar
│   └── tp6.jar
├── src
│   └── tp6
│       └── model
│           └── NetCom.java
└── ws
    ├── compile.sh
    ├── playNet2.sh
    ├── playNet.sh
    ├── playTxt2.sh
    └── playTxt.sh

La commande playTxt.sh vous permet de tester en mode texte.

Vous devez écrire la classe Java NetCom.java pour pouvoir lancer la commande playNet.sh.

Pour cela vous pouvez reprendre la classe recvdata.java (voir le bas de la rubrique Ressources).

Pour retrouver es information IP et port des joueurs, il existe des accesseurs dans deux classes suivantes :

public class Player implements Comparable<Player> {
 
    public String	getName ()	{ return name; }
    public String	getIp ()	{ return ip; }
    public int		getPort ()	{ return port; }
}
public class Game extends StateNotifier implements IGame {
    public Player		getOwner ()		{ return owner;}
}

La classe Packet quand à elle est définie dans l'interface ICom comme suit :

    public class Packet {
	String ip;
	int port;
	String msg;
	public Packet (String ip, int port, String msg) {
	    this.ip = ip;
	    this.port = port;
	    this.msg = msg;
	}
    }
exercices/debut.txt · Dernière modification: 11/09/2018 08:48 par webmestre