コード例 #1
0
/*
 * 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);

}
コード例 #2
0
ファイル: miniftpd.c プロジェクト: Meljihl/ftp-server
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 */