gpt4 book ai didi

Python 的 os stat 返回错误的 inode 值

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:12:46 27 4
gpt4 key购买 nike

我正在运行 CentOS Linux。

我使用专有文件系统创建如下目录:

$ mkdir fooDir

首先,我使用“ls -ldi”检查 inode 值:

$ ls -ldi
total 4
9223372036854783200 drwxrwxrwx 2 root root 4096 Jan 6 20:58 fooDir

然后,我确认“stat”正在报告相同的 inode:

$ stat /fooDir
File: `/fooDir'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 14h/20d Inode: 9223372036854783200 Links: 2
Access: (0777/drwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-01-06 20:58:13.000000000 +0000
Modify: 2016-01-06 20:58:13.000000000 +0000
Change: 2016-01-06 20:58:23.000000000 +0000

但随后我切换到在 python 的交互式提示中运行并对目录运行 om.stat:

$ python
Python 2.6.6 (r266:84292, Jun 18 2012, 14:18:47)
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.stat("/fooDir")
posix.stat_result(st_mode=16895, st_ino=-9223372036854768416, st_dev=20L, st_nlink=2, st_uid=0, st_gid=0, st_size=4096, st_atime=1452113893, st_mtime=1452113893, st_ctime=1452113903)
>>>

Python 的 om.stat 返回的 inode 值与 stat 命令报告的值不匹配。

文件系统已将 inode 值 9223372036854783200 分配给目录“fooDir”,但是 Python 的 om.stat 返回“-9223372036854768416”。

我可以处理将其视为带符号的值,因此是负号,但我很困惑为什么它是一个完全不同的值。

对这里发生的事情有什么想法吗?为什么 Python 的 os stat 返回错误的 inode 值? (或者根据'stat'命令是错误的)

最佳答案

我想出 inode 号是unsigned long,但 om.stat 正在解释为负数,因为设置了 MSB。

所以现在我知道它应该是一个无符号的,我可以按如下方式解决这个问题:

import ctypes
ctypes.c_ulong(os.stat(<dir here>).st_ino).value

更简单的解决方案,没有其他依赖:

if inode < 0 :
inode += 1 << 64

关于Python 的 os stat 返回错误的 inode 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34643289/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com