Browse thread
Re: [Caml-list] Unix.lseek versus Pervasives.pos
- cashin@c...
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | cashin@c... |
| Subject: | Re: [Caml-list] Unix.lseek versus Pervasives.pos |
Sorry if this shows up as a duplicate.
Basile STARYNKEVITCH <basile@starynkevitch.net> writes:
...
> You apparently forgot to flush the channel.
Flushes are for writes, but even when using a test program that just
reads, zero is returned when it appears that it shouldn't return zero.
Compare the short ocaml program below to the comparable C version.
The ocaml version has lseek returning position zero after reading 10
bytes from the file.
ecashin@meili seek-tell$ ./test
after reading 10 chars: "let main =", position is 0
ecashin@meili seek-tell$ cat main.ml
let main =
let fd = Unix.openfile "main.ml" [Unix.O_RDONLY] 0
and buf = String.create 1024 in
Printf.printf "after reading %d chars: \"%s\", position is %d\n"
(UnixLabels.read fd ~buf ~pos:0 ~len:10)
buf
(UnixLabels.lseek fd 0 ~mode:Unix.SEEK_CUR)
;;
main
... but in the C version you get the expected position reported.
ecashin@meili seek-tell$ ./test
after reading "#include <" lseek returns 10
ecashin@meili seek-tell$ cat main.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(void)
{
int fd = open("main.c", O_RDONLY);
char buf[1024];
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
memset(buf, '\0', sizeof(buf));
read(fd, buf, 10);
printf("after reading \"%s\" lseek returns %d\n",
buf, (int) lseek(fd, 0, SEEK_CUR));
return 0;
}
--
--Ed L Cashin | PGP public key:
ecashin@uga.edu | http://noserose.net/e/pgp/
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners