正如您在函数名称中看到的,内核函数fat_ioctl_get_attributes
是通过ioctl从用户空间调用的,我不知道任何其他绑定。因此,你可以简单地读通过调用ioctl
自己的属性,如:
import array
import fcntl
import os
FAT_IOCTL_GET_ATTRIBUTES = 0x80047210
FATATTR_BITS = 'rhsvda67'
def get_fat_attrs(fn):
fd = os.open(fn, os.O_RDONLY)
try:
buf = array.array('L', [0])
try:
fcntl.ioctl(fd, FAT_IOCTL_GET_ATTRIBUTES, buf, True)
except IOError as ioe:
if ioe.errno == 25: # Not a FAT volume
return None
else:
raise
return buf[0]
finally:
os.close(fd)
if __name__ == '__main__':
import sys
for fn in sys.argv[1:]:
attrv = get_fat_attrs(fn)
if attrv is None:
print(fn + ': Not on a FAT volume')
continue
s = ''.join((fb if (1 << idx) & attrv else ' ')
for idx,fb in enumerate(FATATTR_BITS))
print(fn + ': ' + s)
为什么'进口sys'你知道它的主后? – Serdalis 2013-04-09 08:09:33
@Serdalis因为在下一行中,此演示程序遍历程序的所有[命令行参数](http://docs.python.org/3/library/sys.html#sys.argv),并且'如果此演示程序用作库,则不需要sys'。 – phihag 2013-04-09 08:14:58
我在想这个解决方案,但是你是如何得到函数地址(FAT_IOCTL_GET_ATTRIBUTES = 0x80047210)?在我distr我得到错误“功能未实施”。 – therg 2013-04-09 08:24:41