let copy_data fd_in fd_out =
  let rec copy_loop () =
    match Unix.read fd_in buffer 0 buffer_size with
      0 -> ()
    | r ->
        ignore (Unix.write fd_out buffer 0 r);
        copy_loop () in
  copy_loop ()

let tail_lines desc nb =
  let pos = tail desc (get_size desc - 1) nb in
  ignore (lseek desc pos SEEK_SET);
  copy_data desc Unix.stdout