写入文件Ocaml中的特定字节/位置

时间:2017-01-07 21:10:31

标签: ocaml

OCaml中是否有seekp()的等价物? 我需要在某些偏移量的文件中写入字符。

2 个答案:

答案 0 :(得分:2)

一个utop示例,在文件内的某个位置(Test.data)写一个字符('A'):

#use "topfind";;
#require "unix";;
open Unix;;

let fd=openfile "Test.data" [O_WRONLY; O_TRUNC; O_CREAT] 0o666;;

let nbBytes=lseek fd 12 Unix.SEEK_SET;;      
if nbBytes<>12 then failwith "Unix.lseek";;

let nbChars= write fd "A" 0 1;;     
if nbChars<>1 then failwith "Unix.write";;
close fd;;

od -cv Test.data

0000000  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0   A

说明:

  • SEEK_SET表示相对于文件开头的位置。
  • lseek的结果偏离文件的开头
  • 要回放文件,您可以使用:lseek fd 0 Unix.SEEK_SET
  • 要阅读文件的第二个字符,您必须(在阅读之前):lseek fd 1 Unix.SEEK_SET

答案 1 :(得分:1)

可能你正在寻找Unix.lseek,虽然我不熟悉确切的语义。