Почему cp не может скопировать файл /proc/stat?

В моей машине 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 ответа

Решение

/proc является псевдофайловой системой Это указывает на размер 0 для файла /proc/stat,

Вот почему копирование не работает (cp сначала смотрит на размер файла, который он должен копировать), но вы можете легко прочитать информацию и записать ее обратно в файл.

$> cat /proc/stat > statfile

Это было исправлено в GNU coreutils 7.3.

Использование find сделать cp будучи пользователем root, как показано на рисунке,

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


Вот моя попытка,

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

Также, как сказал /proc это псевдо файловая система, означающая, что файлы не хранятся на диске, но имеют привязки к ядру. Вероятно, вы можете читать и / или записывать каждую запись из пространства пользователя, как обычные файловые операции. Обычно разные программы мониторинга, когда они fopen файл, теперь его задача ядра найти соответствующий драйвер, который выполняет задачу, и назначить его этому драйверу. Где в случае /proc его система proc в ядре, которая будет считывать объекты памяти с учетом стоимости загрузки системы.

Другие вопросы по тегам