/* * Obtention d'un dir distant. * 'serverfd' est un socket connecte a la machine 'servername'. * 'distname' est le nom du fichier ou repertoire distant a lister. */ void dir_file (int serverfd, char *servername) { // REQUEST DIR struct request request_dir; request_dir.kind=REQUEST_DIR; //strcpy(request_dir.path,distname); // ANSWER DIR struct answer answer_dir; // Envoie de la requete au serveur if(write(serverfd,&request_dir,sizeof(request_dir))==-1) { perror("Erreur envoi requete : DIR"); exit(EXIT_FAILURE); } // Lecture de la réponse du serveur a la requete****/ if(read(serverfd,&answer_dir,sizeof(answer_dir)) == -1 ){ perror("Erreur lors de la lecture de la réponse : DIR"); exit(EXIT_FAILURE); } // CHECK ack DIR check_answer(&answer_dir); // Affichage du resultat de ls -l copy_all_bytes(serverfd,1); }
void get_file (int socket, char *filename) { struct answer response; response.errnum = 0; response.nbbytes = 0; response.ack = ANSWER_OK; struct stat buf; int file = open(filename, O_RDONLY); if (file != -1) { response.ack = ANSWER_OK; } else{ response.ack = ANSWER_ERROR; response.errnum = errno; } stat(filename, &buf); response.nbbytes = (int) buf.st_size; if(write (socket, &response, sizeof(struct answer)) == -1) { exit (errno); } copy_all_bytes (file, socket); close (file); } /* get_file */