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 :
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 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; }
Je voudrais savoir laquelle des 2 versions est préférable et pourquoi ?
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; }
merci d'avance
Partager