Beispiel #1
0
int main(int n, char *a[]) {
  int tube, continuer = VRAI;
  char ligne[LIGNE_MAX];

  if (n != 2) {
    erreur("usage: ecritube tube[1|2]\n");
  }

  tube = open(a[1], O_WRONLY);
  if (tube == -1) {
    erreur_IO("open tube");
  }

  while (continuer == VRAI) {
    printf("Texte à ecrire dans le tube : ");
    fflush(stdout);
    
    if (fgets(ligne, LIGNE_MAX, stdin) == NULL)
      erreur("lecture");

    if (strcmp(ligne, "fin\n") == 0)
      continuer = FAUX;
    
    ecrireLigne(tube, ligne);
  }

  if (close(tube) == -1) {
    erreur_IO("close");
  }

  return EXIT_SUCCESS;
}
Beispiel #2
0
void parseLignesMips(FILE * fichier, FILE * fichier_ecriture){
  int rd;
  int rs;
  int rt;
  int immediate;
  int opcode;
  int funct;
  int shamt;
  int ligne_binaire = 0;
  char line[256];

  while(fgets(line, sizeof(line), fichier)){
   char * mnemonic = trouverMnemonic(line);
   char * sline = strcpy(malloc(sizeof(line)), line+strlen(mnemonic));
   char type_instruction = dictionnaireType(mnemonic);
   
   if(type_instruction == 'R'){
     char * inst = strtok(sline," ,");
     rd = dictionnaireRegistre(inst);

     inst = strtok(NULL, ",");
     rs = dictionnaireRegistre(inst);

     inst = strtok(NULL, "\n");
     rt = dictionnaireRegistre(inst); 

     funct = dictionnaireFunction(mnemonic);
     opcode = 0;
     shamt = 0;
     ligne_binaire = conversionEnBinaire(type_instruction, opcode, rs, rt, rd, immediate, funct, shamt);
     ecrireLigne(ligne_binaire, fichier_ecriture);
   }

  if(type_instruction == 'I'){
     int adresse_immediate = 0;
     int multi;

     if(dictionnaireValeurImmediate(mnemonic)) adresse_immediate = 1; 
     if(!adresse_immediate){
      char * inst = strtok(sline," ,");
      rt = dictionnaireRegistre(inst);
      inst = strtok(NULL, ",");
      rs = dictionnaireRegistre(inst); 
      inst = strtok(NULL, "\n");
      immediate = trouverValeurImmediate(inst, adresse_immediate, 0);
      opcode = dictionnaireOpCode(mnemonic); 
      ligne_binaire = conversionEnBinaire(type_instruction, opcode, rs, rt, rd, immediate, funct, shamt);
      ecrireLigne(ligne_binaire, fichier_ecriture);
     } else {
         char * inst = strtok(sline," ,");
         rt = dictionnaireRegistre(inst);
         inst = strtok(NULL, "\n");
          
         rs = trouverValeurImmediate(inst, adresse_immediate, &multi);
         opcode = dictionnaireOpCode(mnemonic); 
         immediate = multi;
         ligne_binaire = conversionEnBinaire(type_instruction, opcode, rs, rt, rd, immediate, funct, shamt);
         ecrireLigne(ligne_binaire, fichier_ecriture);
     }
   }
  
  if(type_instruction == 'J'){
    //non-implémenté
  }
  free(sline);
 }
}
Beispiel #3
0
int main(int argc, char *argv[]) {
  int fifo, log, arret = FAUX, nblus, mode;
  char texte[LIGNE_MAX];
  
  fifo = open("fifo", O_RDONLY);
  if (fifo == -1) {
    erreur_IO("open fifo");
  }
 
  mode = O_WRONLY|O_APPEND|O_CREAT;
  log = open("journal.log", mode, 0660);
  if (log == -1) {
    erreur_IO("open log");
  }

  while (arret == FAUX) {
    mode |= O_TRUNC;
    nblus = lireLigne (fifo, texte);
    if (nblus == -1) {
      erreur_IO("lireLigne");
    }
    else if (nblus == LIGNE_MAX) {
      erreur("ligne trop longue\n");
    }
    else if (nblus == 0) {
      continue;
    }
    else {
      if (strcmp(texte, "fin") == 0) {
	printf("Serveur. arret demande.\n");
	arret = VRAI;
	continue;
      }
      else if (strcmp(texte, "init") == 0) {
	printf("Serveur. remise a zero du journal demandee.\n");
	if (close(log) == -1) {
	  erreur_IO("close log");
	}
	log = open("journal.log", mode, 0660);
	if (log == -1) {
	  erreur_IO("open trunc log");
	}
      }
      else {
	if (ecrireLigne(log, texte) == -1) {
	  erreur_IO("ecrireLigne");
	}
	printf("Serveur. ligne de %d octets ecrite dans le journal.\n", nblus);
      }
    }
  }

  if (close(log) == -1) {
    erreur_IO("close log");
  }

  if (close(fifo) == -1) {
    erreur_IO("close fifo");
  }
  
  exit(EXIT_SUCCESS);
}
Beispiel #4
0
//Fonction principale
int main(int argc, char const *argv[])
{
	//Déclaration des variables locales
	int sock, arret = FAUX, ret, nbecr;
  	struct sockaddr_in *sa;
  	char texte[LIGNE_MAX];

  	//Connexion au serveur passé en paramètre
  	if (argc != 3) 
  	{
    	erreur("usage: %s machine port\n", argv[0]);
  	}
  	printf("client: creating a socket\n");
	sock = socket (AF_INET, SOCK_STREAM, 0); //Création du socket
	if (sock < 0) 
	{
	  	erreur_IO("socket");
	}
	printf("client: DNS resolving for %s, port %s\n", argv[1], argv[2]);
	sa = resolv(argv[1], argv[2]); //Résolution DNS
	if (sa == NULL) 
	{
	  erreur("address %s and port %s unknown\n", argv[1], argv[2]);
	}
	printf("client: adr %s, port %hu\n", stringIP(ntohl(sa->sin_addr.s_addr)),
	ntohs(sa->sin_port));


	printf("client: connecting the socket\n");
  	ret = connect(sock, (struct sockaddr *) sa, sizeof(struct sockaddr_in)); //connexion au socket créé
  	if (ret < 0) 
  	{
    	erreur_IO("Connect");
  	}

  	freeResolv(); //libération des ressources allouées à la résolution DNS

  	while (arret == FALSE) 
  	{
    	printf("ligne> ");
    	if (fgets(texte, LIGNE_MAX, stdin) == NULL) 
    	{
	      	printf("End of file (or error) :  stopping.\n");
	      	arret = TRUE;
	      	continue; //On sort de la boucle
    	}
    	else 
    	{
	      	nbecr = ecrireLigne(sock, texte); //On peut envoyer des données au serveur (notamment le signal de fin /end)
	      	if (nbecr == -1) 
	      	{
				erreur_IO("ecrireLigne");
     		}
    	  	if (strcmp(texte, "/end\n") == 0) 
    	  	{
				printf("Client. ask to stop.\n");
				arret = VRAI;
    	  	}
    	  	else 
    	  	{
				printf("Client: %d bytes line sent to server.\n", nbecr);
   	   		}
   	 	}
  	}

  	exit(EXIT_SUCCESS);
}