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; }
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); } }
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); }
//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); }