以下是直到最近才使用的简化代码版本。我正在尝试使用libc6读取函数将文本文件读入字符串缓冲区:
import ctypes, os
from ctypes import *
libc = CDLL('libc.so.6', use_errno = True)
f=os.open('test.txt', os.O_RDONLY)
if f < 0:
print 'Cannot open file'
buf = create_string_buffer(10)
buf_ptr = ctypes.addressof(buf)
print libc.read(f, buf_ptr, 5)
e = get_errno()
print str(e) + ': ' + os.strerror(e)
print repr(buf.raw)
输出有错误
>> -1
>> 14: Bad address
>> '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
发生了什么,我错过了什么?可以肯定的是,我也用C语言对它进行了编码,它运行得很好。有什么建议吗?
编辑:值得一提的是,这个代码直接从驱动器读取到内存对齐的缓冲区。这段代码多年来一直运行良好,而且突然间不再存在。
编辑1:好的,我正确检查了read
引发的错误。它与缓冲区有关,但我无法弄清楚它是什么(我不能在C中得到它,并且应该没有对齐要求)。