为什么cp无法复制/ proc / stat文件?

时间:2013-11-04 12:39:51

标签: linux unix procfs

在我的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;
  }

2 个答案:

答案 0 :(得分:7)

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

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

$> cat /proc/stat > statfile

这在GNU coreutils 7.3中是fixed

答案 1 :(得分:0)

使用find以root用户身份执行cp,如图所示

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系统将读取内存实体,其中涉及系统负载的成本。