toucan
2010-03-20 12:23:59 UTC
Bonjour,
J'essaie de lire un fichier binaire dans une chaîne de caractère,
à l'aide de la fonction Unix.read. Elle semble renvoyer au
maximum 16384 à la fois. J'aimerais savoir d'où vient cette limite
(imposée par l'OS ou par ocaml ?).
La doc "man 2 read" m'indique que ce n'est pas a priori une erreur,
mais il me semble qu'en C on peut lire plus que ça en une fois.
J'utilise ocaml 3.11.2 sous Linux Debian 5, 32 bits.
Pour observer la chose, on peut utiliser :
open Unix;;
let check name =
let n = (stat name).st_size in
let s = String.make n ' ' in
let fd = openfile name [O_RDONLY] 0o600 in
let k = read fd s 0 n in
close fd;
k;;
Ce n'est de toute façon pas bien grave, puisqu'il suffit d'écrire
une boucle qui lit tout, ce qui est plus propre.
let readbytes name =
let n = (stat name).st_size in
let s = String.make n ' '
and ofs = ref 0
and fd = openfile name [O_RDONLY] 0o600 in
while !ofs < n do
ofs := !ofs + read fd s !ofs (n - !ofs)
done;
close fd;
s;;
J'essaie de lire un fichier binaire dans une chaîne de caractère,
à l'aide de la fonction Unix.read. Elle semble renvoyer au
maximum 16384 à la fois. J'aimerais savoir d'où vient cette limite
(imposée par l'OS ou par ocaml ?).
La doc "man 2 read" m'indique que ce n'est pas a priori une erreur,
mais il me semble qu'en C on peut lire plus que ça en une fois.
J'utilise ocaml 3.11.2 sous Linux Debian 5, 32 bits.
Pour observer la chose, on peut utiliser :
open Unix;;
let check name =
let n = (stat name).st_size in
let s = String.make n ' ' in
let fd = openfile name [O_RDONLY] 0o600 in
let k = read fd s 0 n in
close fd;
k;;
Ce n'est de toute façon pas bien grave, puisqu'il suffit d'écrire
une boucle qui lit tout, ce qui est plus propre.
let readbytes name =
let n = (stat name).st_size in
let s = String.make n ' '
and ofs = ref 0
and fd = openfile name [O_RDONLY] 0o600 in
while !ofs < n do
ofs := !ofs + read fd s !ofs (n - !ofs)
done;
close fd;
s;;