Version française
Home     About     Download     Resources     Contact us    
Browse thread
Re: [Caml-list] (Sorry for my last post) lazyness, exceptions?, ocaml syntax rule-of-thumbs
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Alessandro Baretta <alex@b...>
Subject: Re: [Caml-list] (Sorry for my last post) lazyness, exceptions?, ocaml syntax rule-of-thumbs


malc wrote:
> On Sun, 29 Sep 2002, Alessandro Baretta wrote:
> 
> 
>>malc wrote:
>>
>>>I might be way off here, but shouldnt it be:
>>>
>>>let input_file_as_string file =
>>>  let chanin = open_in_bin file in
>>>  let len = in_channel_length chanin in
>>>  let s = String.create len in
>>>  really_input chanin s 0 (pred len);
>>>  close_in chanin;
>>>  s
>>
>># in_channel_length stdin;;
>>Exception: Sys_error "Illegal seek".
> 
> 
> Yes, but the function should be called: input_channel[stream]_as_string, 
> no?
> 

Scratch... Scratch... I'm not sure what you mean.

My point is just that in_channel_length is only meaningful 
for channels connected to regular files. Otherwise, it 
raises Sys_error. Maxence Guesdon's version handles this 
case correctly, since it assumes that a channel is at the 
EOF if-and-only-if reading from it raises End_of_file.

If you mean that the name of function seems to imply that 
its parameter is a regular file, I disagree with you. In 
UNIX anything you can do IO onto is a _file_ descriptor. In 
C buffered IO is done through FILE* variables. One simply 
has to write code which correctly handles the different 
kinds of files that exist in the UNIX world. Some you can 
seek on; on others you cannot, and all you can do is 
continue to read until there is nothing left to read -- that 
is fread(fdesc, buf, max) returns 0 when max > 0.

Alex

-------------------
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