gpt4 book ai didi

c - lsof 总是报告偏移量等于 OSX 中的文件大小

转载 作者:行者123 更新时间:2023-12-04 02:19:21 26 4
gpt4 key购买 nike

我试图估计我的程序处理了多少文件,对我来说一个明显的解决方案是使用 lsof -o。但令人惊讶的是,lsof 输出中的 OFFSET 总是等于 SIZE(就像在 lsof -s -- 中),所以我决定写一些简单的程序来测试该行为,以及...

C:

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>

int main(void) {
int filedesc = open("path/to/file", O_RDONLY);
printf("%i\n", filedesc);
while(1) {};
}

斯卡拉:

io.Source.fromFile(path)

python :

open(path)

OFFSET 在 OS X 下总是在文件末尾:

$ lsof -o /path/to/file
COMMAND PID USER FD TYPE DEVICE OFFSET NODE NAME
a.out 5390 folex 3r REG 1,4 631302648 48453926 /path/to/file

$ lsof -s -- /path/to/file
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
a.out 5390 folex 3r REG 1,4 631302648 48453926 /path/to/file

非常感谢对这些语言中的每一种的任何解释。

更新:在 Ubuntu 下按预期工作。仅在 OS X 下有错误的偏移量。

最佳答案

这是 OSX 手册页关于 lsof 的大小/偏移列的内容(添加了强调):

SIZE, SIZE/OFF, or OFFSET is the size of the file or the file offset in bytes. A value is displayed in this column only if it is available. Lsof displays whatever value - size or offset - is appropriate for the type of the file and the version of lsof. On some UNIX dialects lsof can't obtain accurate or consistent file offset information from its kernel data sources, [...]

The file size is displayed in decimal; the offset is normally displayed in decimal with a leading '0t' if it contains 8 digits or less; in hexadecimal with a leading '0x' if it is longer than 8 digits. [...]

Thus the leading '0t' and '0x' identify an offset when the column may contain both a size and an offset (i.e., its title is SIZE/OFF).

尽管列标题显示 OFFSET,但该数字没有前导 '0t''0x',因此我认为文件偏移信息是OSX 内核根本不可用。

关于c - lsof 总是报告偏移量等于 OSX 中的文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32082333/

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