Ven 19 Luglio, 04:22:56 - 2019

Autore Topic: P8-E1  (Letto 161 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline 6ninjak

  • Studente
  • *
  • Post: 12
  • FeedBack: +5/-0
    • Mostra profilo
P8-E1
« il: Mar 07 Maggio, 23:34:44 - 2019 »
Codice: [Seleziona]
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int sum(const char* filename, unsigned long *psum) {
    int fd = open(filename, O_RDONLY);
    if (fd == -1) {
        perror("Errore nella open\n");
        exit(EXIT_FAILURE);
    }
    unsigned long s = 0;
    unsigned buf;
    ssize_t res = read(fd, &buf, 4);
    while (res == 4) {
        s += buf;
        res = read(fd, &buf, 4);
    }

    if (res == -1) {
        perror("Errore nella read\n");
        exit(EXIT_FAILURE);
    }
    *psum = s;
    return *psum;
}

Offline cicco

  • Studente
  • *
  • Post: 5
  • FeedBack: +1/-0
    • Mostra profilo
Re:P8-E1
« Risposta #1 il: Mer 08 Maggio, 16:43:58 - 2019 »
Manca la close, per il resto è corretto, a parte il valore di ritorno.
Anche se non è specificato nel testo dell'esercizio, la funzione deve ritornare EXIT_FAILURE (oppure terminare direttamente con exit(EXIT_FAILURE)) in caso di errore e EXIT_SUCCESS in caso di successo (confronta il sorgente del main in cui il valore di ritorno di sum viene poi usato come valore di ritorno del main.
« Ultima modifica: Mer 08 Maggio, 16:53:02 - 2019 da cicco »

Offline 6ninjak

  • Studente
  • *
  • Post: 12
  • FeedBack: +5/-0
    • Mostra profilo
Re:P8-E1
« Risposta #2 il: Dom 19 Maggio, 11:41:39 - 2019 »
così dovrebbe essere giusto
Codice: [Seleziona]
int sum(const char* filename, unsigned long *psum) {
    int fd = open(filename, O_RDONLY);
    if (fd == -1) {
        perror("Errore nella open\n");
        exit(EXIT_FAILURE);
    }
    unsigned long s = 0;
    unsigned buf;
    ssize_t res = read(fd, &buf, 4);
    while (res == 4) {
        s += buf;
        res = read(fd, &buf, 4);
    }

    if (res == -1) {
        perror("Errore nella read\n");
        exit(EXIT_FAILURE);
    }
    *psum = s;
    fd = close(fd);
    if (fd == -1) {
        perror("Errore nella close\n");
        exit(EXIT_FAILURE);
    }
    return EXIT_SUCCESS;
}