Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

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: 2002-09-30 (01:09)
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.


To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: