오프셋 값 (file.tell) 파일을 유지하려고하므로 다시 시작할 때 프로세스가 그 많은 문자를 건너 뛸 수 있습니다.파일에 파이썬 쓰기 null 문자를 앞에
그래서 나는 truncate/write/flush 시퀀스를 가지고있다. 그러나 매번 널 문자를 파일의 맨 위에 놓습니다. 패턴은 이전 파일 내용의 길이와 동일한 수의 널 문자를 나타냅니다.
다음 세션을 재현했습니다. 이 null을 얻지 못하는 방법을 알아내는 데 도움을 주셔서 감사합니다.
고마워요.
[email protected] ~/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
[email protected] ~/lab $ wc ha.offset
2 2 21 ha.offset
[email protected] ~/lab $ fg
python
>>> msg="first=987\nsecond=9877\n"
>>> fd.truncate(0)
>>> fd.write(msg)
>>> fd.flush()
>>>
[1]+ Stopped python
[email protected] ~/lab $ wc ha.offset
2 2 43 ha.offset
[email protected] ~/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
[email protected] ~/lab $ fg
python
msg="first=1"
msg="first=1"
>>> fd.truncate(0)
>>> fd.write(msg)
>>> fd.flush()
>>>
[1]+ Stopped python
[email protected] ~/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
감사합니다. 항상 RTFM! – Dinesh
@Dinesh 문제 없습니다. 모두에게 발생합니다. –