Bonjour,

Le but étant d'écrire une fonction myread qui rappelle read juqu'à avoir lu en tout count caractères, ou avoir rencontré une erreur ou une fin de fichier

Je vous propose 2 versions de myread qui compilent et qui font a priori le travail demandé :

voici la première :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ssize_t myread (int fd, void *buf, size_t count) {
 
    ssize_t n;
    ssize_t res = count;
 
    while ((n = read (fd, buf, res)) > 0)
	res -= n;
 
    if (n == -1) {
	perror ("read");
	exit (2);
    }
 
    return count - res;
}
et voila la seconde :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ssize_t myread (int fd, void *buf, size_t count) {
 
    ssize_t chars_read = 0;
    ssize_t result;
    char *s = buf;
 
    while (chars_read < count) {
 
	result = read (fd, s, count - chars_read);
	if (result == 0 || (result == -1 && chars_read > 0))
	    return chars_read;
	else if (result == -1)
	    return -1;
	else {
	    chars_read += result;
	    s += result;
	}
    }
 
    return chars_read;
}
Je voudrais savoir laquelle des 2 versions est préférable et pourquoi ?

merci d'avance