如何在 /proc 中显示文件的大小?它的大小不应该为零

Posted

技术标签:

【中文标题】如何在 /proc 中显示文件的大小?它的大小不应该为零【英文标题】:how can i show the size of files in /proc? it should not be size zero 【发布时间】:2012-08-27 14:12:19 【问题描述】:

从下面的消息中,我们知道文件/proc/sys/net/ipv4/ip_forward中有两个字符,但是为什么ls只是显示这个文件的大小为零?

我知道这不是磁盘上的文件,而是内存中的文件,那么有什么命令可以让我看到 /proc 中文件的实际大小吗?

root@OpenWrt:/proc/sys/net/ipv4# cat ip_forward | wc -c
2
root@OpenWrt:/proc/sys/net/ipv4# ls -l ip_forward
-rw-r--r--    1 root     root            0 Sep  3 00:20 ip_forward
root@OpenWrt:/proc/sys/net/ipv4# pwd
/proc/sys/net/ipv4 

【问题讨论】:

【参考方案1】:

这些不是磁盘上的真正文件(正如您提到的),但它们也不是内存中的文件 - /proc 中的名称对应于对操作系统中正在运行的内核的调用,并且内容是动态生成的。

如果不生成文件,系统不知道文件有多大,但如果您读取“文件”两次,则无法保证您获得相同的数据,因为系统可能已更改。

您可能正在寻找该程序 sysctl -a 而是。

【讨论】:

那么使用 sysctl,我还需要 cat /proc 中的文件吗?或者我可以用 sysctl 做所有事情?【参考方案2】:

/proc 中的东西并不是真正的文件。在大多数情况下,它们甚至不是内存中的文件。当您访问这些文件时,proc 文件系统驱动程序会执行系统调用,获取适合文件的数据,然后将其格式化以输出。这通常是动态构建的动态数据。一个例子是 /proc/net/arp,它包含当前的 ARP 缓存。

获取这些东西的大小只能通过格式化整个输出来完成,所以不能只在列出文件时完成。如果您想要尺寸,请照常使用wc -c

【讨论】:

【参考方案3】:

/proc/ 文件系统是由内核维护的“幻想”,它不会费心给出(大部分)其伪文件的大小(因为计算“真实”大小通常涉及构建整个文本伪文件的内容),并期望/proc/ 中的大多数[伪] 文本文件以合理大小(例如1K)的块从第一个字节到最后一个字节(即直到EOF)按顺序读取。有关详细信息,请参阅 proc(5) 手册页。

所以没有办法在单个系统调用(如stat(2))中获得真实大小(如/proc/self/maps/proc/sys/net/ipv4/ip_forward),因为它会给出0 的大小,正如@987654323 所报告的那样@ 或 ls(1) 命令)。阅读这些文本文件的典型方式可能是

FILE* f = fopen("/proc/self/maps", "r"); 
                // or some other textual /proc file, 
                // e.g. /proc/sys/net/ipv4/ip_forward
if (f) 
  
      do 
        // you could use readline instead of fgets
        char line[256];
        memset (line, 0, sizeof(line));
        if (NULL == fgets(line, sizeof(line), f))
          break;
        // do something with line, for example:
        fputs(line, stdout);
       while (!feof (f));
    fclose (f);
  

当然,某些文件(例如 /proc/self/cmdline)被记录为可能包含 NUL 字节。你需要一些fread 给他们。

【讨论】:

【参考方案4】:

它实际上并不是内存中的文件,它是用户和内核之间的接口。

【讨论】:

以上是关于如何在 /proc 中显示文件的大小?它的大小不应该为零的主要内容,如果未能解决你的问题,请参考以下文章

如何在 nvd3 中禁用图例或限制它的大小

R如何在将csv文件写入磁盘之前估计它的大小

Linux中查看文件夹大小的命令

发现 /proc/mounts 的“真实”大小

android. imageview是如何控制它的宽高比例,不让各种规则图片影响它大小。如图。图片

当包含它的 DIV 类的大小正确时,如何纠正不成比例地拉伸的图像?