let cpipe ?(nonblock=false) () = 
  let (rdfd, wrfd) = Unix.pipe () in
  if nonblock then Unix.set_nonblock rdfd;
  let rd = Unix.in_channel_of_descr rdfd in
  let wr = Unix.out_channel_of_descr wrfd in
  (rd, wr)