我正在尝试维护一个偏移值的文件(file.tell),以便在重新启动时进程可以跳过这么多字符。
所以我有一个truncate / write / flush序列。但每次它将空字符放在文件的顶部。模式显示空字符数等于前一个文件内容的长度。
我已经转载了下面的会议。我将非常感谢您帮助我们了解如何获取这些空值。
非常感谢。
dinesh@c1 ~/lab $ python
Python 2.6.8 (unknown, Jul 16 2013, 14:48:55)
[GCC 4.3.4 [gcc-4_3-branch revision 152973]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os,fcntl
>>> f=os.open("ha.offset", os.O_RDWR, 0744)
>>> fcntl.lockf( f, fcntl.LOCK_EX | fcntl.LOCK_NB )
>>> fd = os.fdopen(f, "w+")
>>> msg="first=123\nsecond=234\n"
>>> fd.truncate(0)
>>> fd.write(msg)
>>> fd.flush()
>>>
[1]+ Stopped python
dinesh@c1 ~/lab $ wc ha.offset
2 2 21 ha.offset
dinesh@c1 ~/lab $ fg
python
>>> msg="first=987\nsecond=9877\n"
>>> fd.truncate(0)
>>> fd.write(msg)
>>> fd.flush()
>>>
[1]+ Stopped python
dinesh@c1 ~/lab $ wc ha.offset
2 2 43 ha.offset
dinesh@c1 ~/lab $ od -c ha.offset
0000000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000020 \0 \0 \0 \0 \0 f i r s t = 9 8 7 \n s
0000040 e c o n d = 9 8 7 7 \n
0000053
dinesh@c1 ~/lab $ fg
python
msg="first=1"
msg="first=1"
>>> fd.truncate(0)
>>> fd.write(msg)
>>> fd.flush()
>>>
[1]+ Stopped python
dinesh@c1 ~/lab $ !od
od -c ha.offset
0000000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
0000040 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 f i r s t
0000060 = 1
0000062
答案 0 :(得分:2)
docs for truncate表示维护文件中的位置:
file.truncate([大小])
截断文件的大小。如果存在可选的大小参数,则文件将截断为(最多)该大小。大小默认为当前位置。当前文件位置未更改。请注意,如果指定的大小超过文件的当前大小,则结果取决于平台:可能包括文件可能保持不变,增加到指定大小,就像零填充一样,或者使用未定义的新内容增加到指定大小。可用性:Windows,许多Unix变体。
所以我怀疑你需要在第一次和第二次写入之间的某个地方fd.seek(0)
。