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 |