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

示されているように、root ユーザーとして存在するために使用findします。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関連するシステム負荷のコストでメモリ エンティティを読み取ります。

于 2013-11-04T14:01:11.467 に答える