5

在我的 linux 机器中,如果我尝试复制 /proc/stat 它正在创建 0 字节文件。但如果我做 cat /proc/stat 它有数据。但大小始终显示为 0。

 cp /proc/stat statfile

正在创建零字节文件。如果我编写一个程序来复制,那么它就可以工作。为什么会这样?

  int main() 
  {
    std::ifstream procFile("/proc/stat");
    std::ofstream outfile("statfile");
    char buf[1024];
    while (!procFile.eof() && procFile.is_open())
    {
            procFile.getline(buf, 1024);
            outfile << buf<<endl;
    }

    procFile.close();
    outfile.close();
    return 0;
  }
4

2 回答 2

8

/proc是一个伪文件系统。它表示文件的大小为 0 /proc/stat

这就是复制不起作用的原因(cp 确实首先查看它必须复制的文件的大小),但您可以轻松读取信息并将其写回文件。

$> cat /proc/stat > statfile

这已在 GNU coreutils 7.3中修复。

于 2013-11-04T12:42:53.087 回答
0

find如图所示,以cproot 用户身份使用,

find /proc/cpuinfo -type f -exec cp -iv '{}' /home/dir/ \;


这是我的尝试,

~/cpuinfo$ ls
~/cpuinfo$ sudo find /proc/cpuinfo -type f -exec cp -iv '{}' /home/esunboj/
  stackoverflow/cpuinfo/ \;
  `/proc/cpuinfo' -> `/home/esunboj/stackoverflow/cpuinfo/cpuinfo'
~/cpuinfo$ ls   
  cpuinfo

此外,如前所述,这/proc是一个伪文件系统,这意味着文件不存储在磁盘上,而是与内核挂钩。可能您可以像普通文件操作一样从用户空间读取和/或写入每个条目。通常不同的监视程序当它们fopen是一个文件时,它现在的内核工作是找到处理任务的适当驱动程序并将其分配给该驱动程序。如果/proc内核中的 proc 系统将读取内存实体,则涉及系统负载的成本。

于 2013-11-04T14:01:11.467 回答