26975


Unix.pipeを使って in_channel, out_channelを作りたいです。

[code]

    let _ =
      let read_desc, write_desc = Unix.pipe () in
      let read_ch = Unix.in_channel_of_descr read_desc in
      set_binary_mode_in read_ch false;
      let write_ch = Unix.out_channel_of_descr read_desc in
      set_binary_mode_out write_ch false;
      output_string write_ch "hello"; flush write_ch;
      (read_ch, write_ch)
    
[/code]

上記ファイルをpipe.mlという名前で保存して次のようにコンパイルしたところ、実行時エラーとなってしまいます。どこが間違っているか分かりません。

[code]

    $ ocamlc -g unix.cma pipe.ml
    $ ./a.out 
    Fatal error: exception Sys_error("Bad file descriptor")
    Raised by primitive operation at unknown location
    Called from file "pipe.ml", line 8, characters 34-48
    
[/code]

当方の環境は以下の通りです。

  * Ubuntu 14.04 64bit
  * ocaml 4.02.3


CC BY-SA 3.0
2016-06-23T02:13:20.010
26974
2016-06-23T02:32:47.083
2016-06-23T02:24:31.700
16921
16921
question
unix ocaml
OCamlでUnix.pipeへの書き込みができない


少なくとも以下の部分は、

>
[code]

>     let write_ch = Unix.out_channel_of_descr read_desc in
>  
[/code]

[code]

    let write_ch = Unix.out_channel_of_descr write_desc in
    
[/code]

とするのではないでしょうか？(`read_desc` -> `write_desc`)


CC BY-SA 3.0
2016-06-23T02:32:47.083
26975
2016-06-23T02:32:47.083
26974
answer