home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / mac / progrmng / cmlmcmpw.sit / Caml Light / Lib / io.mli < prev    next >
Encoding:
Text File  |  1991-05-03  |  9.4 KB  |  171 lines  |  [TEXT/MPS ]

  1. (* Buffered input-output *)
  2.  
  3. type in_channel                         (* input channels *)
  4.  and out_channel                        (* output channels *)
  5. ;;
  6. exception End_of_file
  7.         (* Raised when an operation cannot complete, because the end
  8.            of the file is reached. *)
  9. ;;
  10. value std_in : in_channel
  11.   and std_out : out_channel
  12.   and std_err : out_channel
  13.         (* The Unix standard input and outputs of the process. *)
  14. ;;
  15. value exit : int -> 'a
  16.         (* Flushes all pending writes on std_out and std_err,
  17.            and terminates the process with the given status code
  18.            (usually 0 to indicate no errors, and a positive integer
  19.            to indicate failure. This function MUST be called at
  20.            the end of standalone programs that output results on
  21.            std_out or std_err; otherwise, the program may appear
  22.            to produce no output, or its output may be truncated. *)
  23. ;;
  24.  
  25. value open_in : string -> in_channel
  26.         (* Opens the named file for reading, and returns a new input channel
  27.            on that file, positionned at the beginning of the file.
  28.            Raises OS_error if the file could not be opened. *)
  29.   and open_in_gen : int -> int -> string -> in_channel
  30.         (* "open_in_gen mode rights filename" opens the file named
  31.            filename for reading, as above. The integers mode and rights
  32.            specify the opening mode (see unix__open). *)
  33.   and open_descriptor_in : int -> in_channel = 1 "open_descriptor" "alloc"
  34.         (* "open_descriptor_in fd" returns a buffered input channel
  35.            reading from the file descriptor fd. fd must have been previously
  36.            opened for reading (see unix__open, unix__pipe). *)
  37.   and input_char : in_channel -> char = 1 "input_char"
  38.         (* Reads one character from the given input channel.
  39.            Raises End_of_file if there are no more characters to read. *)
  40.   and input : in_channel -> string -> int -> int -> int = 4 "input"
  41.         (* "input chan buff ofs len" attempts to read len characters
  42.            from channel chan, storing them in string buf, starting at
  43.            offset ofs. It returns the actual number of characters
  44.            read, between 0 and len. On regular files, a return value
  45.            less than len means that the end of the file was reached.
  46.            On pipes, terminals, sockets, ..., a return value of 0
  47.            usually means that the end of "file" was reached; a return
  48.            value between 0 and len exclusive means that no more
  49.            characters were available at that time. See the Unix man
  50.            pages for read(2).
  51.            Anything can happen if (ofs,len) does not correspond to a
  52.            valid substring of buff. *)          
  53.   and input_byte : in_channel -> int = 1 "input_char"
  54.         (* Same as input_char, but returns the 8-bit integer representing
  55.            the character.
  56.            Raises End_of_file if there are no more characters to read. *)
  57.   and input_int : in_channel -> int = 1 "input_int"
  58.         (* Reads four character from the given input channel, and
  59.            returns the integer encoded by these characters. See output_int.
  60.            Raises End_of_file if there are not enough characters to read. *)
  61.   and input_value : in_channel -> 'a = 1 "intern_val" "alloc"
  62.         (* Reads the representation of a structured value, as produced
  63.            by output_value, and returns the corresponding value.
  64.            THIS IS NOT TYPE-SAFE. The type of the returned object is
  65.            not "'a" properly speaking: the returned object has one
  66.            unique type, that cannot be determined at compile-time. The
  67.            programmer must cast the returned value to the expected
  68.            type, and be sure that the object in the file does belong
  69.            to that type. *)
  70.   and seek_in : in_channel -> int -> unit = 2 "seek_in"
  71.         (* "seek_in chan pos" sets the current reading position to pos
  72.            for channel chan. This works only for regular files. On
  73.            pipes, terminals, sockets, ..., this does nothing, but does
  74.            not fail either. *)
  75.   and pos_in : in_channel -> int = 1 "pos_in"
  76.         (* Returns the current reading position for the given channel.
  77.            This works only for regular files. On pipes, terminals,
  78.            sockets, ..., the result is meaningless. *)
  79.   and in_channel_length : in_channel -> int = 1 "channel_size"
  80.         (* Returns the total length (number of characters) for the
  81.            given channel. This works only for regular files. On pipes,
  82.            terminals, sockets, ..., the result is meaningless. *)
  83.   and close_in : in_channel -> unit = 1 "close_in" "alloc"
  84.         (* Closes the given channel. Anything can happen if any of the
  85.            operations above is performed on a closed channel. *)
  86. ;;
  87. value open_out : string -> out_channel
  88.         (* Opens the named file for writing, and returns a new output channel
  89.            on that file, positionned at the beginning of the file. The
  90.            file is truncated to zero length if it already exists. It
  91.            is created if it does not already exists.
  92.            Raises OS_error if the file could not be opened. *)
  93.   and open_out_gen : int -> int -> string -> out_channel
  94.         (* "open_out_gen mode rights filename" opens the file named
  95.            filename for writing, as above. The integers mode and rights
  96.            specify the opening mode (see unix__open). *)
  97.   and open_descriptor_out : int -> out_channel = 1 "open_descriptor" "alloc"
  98.         (* "open_descriptor_in fd" returns a buffered output channel
  99.            reading from the file descriptor fd. fd must have been previously
  100.            opened for writing (see unix__open, unix__pipe). *)
  101.   and flush : out_channel -> unit = 1 "flush"
  102.         (* Flushes the buffer associated with the given output channel, 
  103.            performing all pending writes on that channel.
  104.            Interactive programs must be careful about flushing std_out
  105.            at the right times. *)
  106.   and output_char : out_channel -> char -> unit = 2 "output_char"
  107.         (* Writes one character on the given output channel. *)
  108.   and output_string : out_channel -> string -> unit
  109.         (* Writes the given string on the given output channel. *)
  110.   and output : out_channel -> string -> int -> int -> unit = 4 "output"
  111.         (* "output chan buff ofs len" writes len characters from string 
  112.            buff, starting at offset ofs, to the output channel chan.
  113.            Anything can happen if (ofs,len) does not correspond to a
  114.            valid substring of buff. *)          
  115.   and output_byte : out_channel -> int -> unit = 2 "output_char"
  116.         (* Writes one 8-bit integer on the given output channel. *)
  117.   and output_int : out_channel -> int -> unit = 2 "output_int"
  118.         (* Writes one integer as four characters on the given output channel.
  119.            The only reliable way to read it back is through the
  120.            input_int function. *)
  121.   and output_value : out_channel -> 'a -> unit = 2 "extern_val"
  122.         (* Writes the representation of a structured value of any type
  123.            to a channel. Circularities and sharing inside the value
  124.            are detected and preserved. The object can be read back,
  125.            possibly in another process, by the function input_value. *)
  126.   and seek_out : out_channel -> int -> unit = 2 "seek_out"
  127.         (* "seek_out chan pos" sets the current writing position to pos
  128.            for channel chan. This works only for regular files. On
  129.            pipes, terminals, sockets, ..., this does nothing, but does
  130.            not fail either. *)
  131.   and pos_out : out_channel -> int = 1 "pos_out"
  132.         (* Returns the current writing position for the given channel.
  133.            This works only for regular files. On pipes, terminals,
  134.            sockets, ..., the result is meaningless. *)
  135.   and out_channel_length : out_channel -> int = 1 "channel_size"
  136.         (* Returns the total length (number of characters) for the
  137.            given channel. This works only for regular files. On pipes,
  138.            terminals, sockets, ..., the result is meaningless. *)
  139.   and close_out : out_channel -> unit = 1 "close_out" "alloc"
  140.         (* Closes the given channel, flushing all buffered write operations.
  141.            All opened output channels must be closed by hand at the
  142.            end of a standalone program, to ensure that all written data
  143.            will make its way through the Unix files and devices. *)
  144. ;;
  145. value print_char : char -> unit
  146.         (* Prints one character on standard output. *)
  147.   and print_string : string -> unit
  148.         (* Prints one string on standard output. *)
  149.   and print_int : int -> unit
  150.         (* Prints one integer, in decimal, on standard output. *)
  151.   and print_float : float -> unit
  152.         (* Prints one floating-point number, in decimal, on standard output. *)
  153.   and print_endline : string -> unit
  154.         (* Prints one newline character on standard output. *)
  155.   and print_newline : unit -> unit
  156.         (* Prints one newline character on standard output, and flushes
  157.            standard output. This can be used to simulate line
  158.            buffering of standard output. *)
  159. ;;
  160. value prerr_char : char -> unit
  161.         (* Prints one character on standard error. *)
  162.   and prerr_string : string -> unit
  163.         (* Prints one string on standard error. *)
  164.   and prerr_int : int -> unit
  165.         (* Prints one integer, in decimal, on standard error. *)
  166.   and prerr_float : float -> unit
  167.         (* Prints one floating-point number, in decimal, on standard error. *)
  168.   and prerr_endline : string -> unit
  169.         (* Prints one newline character on standard error. *)
  170. ;;
  171.