在python

时间:2017-07-07 22:55:40

标签: python python-2.7 ctypes

以下是直到最近才使用的简化代码版本。我正在尝试使用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中得到它,并且应该没有对齐要求)。

0 个答案:

没有答案