【发布时间】:2015-11-11 23:25:06
【问题描述】:
我试图估计我的程序处理了多少文件,对我来说一个明显的解决方案是使用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 下错误的偏移量。
【问题讨论】:
-
您的 sn-ps 都没有从位置 0 移动偏移量。您确定您正确解释了
lsof的输出吗?将其复制粘贴到您的问题中。还要查看内核报告的数据(并将其复制到您的问题中),这就是lsof使用的:/proc/<PID>/<FD>/fdinfo -
刚刚发现在 linux 下它工作正常 :( 所以这是 OS X 和 lsof 互操作错误。
-
C 示例:
open()返回打开文件的文件描述符。它不会告诉您有关文件大小的任何信息。我建议阅读手册页。 -
lsof -s --给出文件大小,lsof -o给出描述符偏移量。片段与文件大小无关。 -
你能展示你看到的输出的一个小样本吗?
标签: c macos scala filesystems lsof