Не мог сохранить владение в копии, но способный с перемещением?

Фиксация для этого должна исправить Ваше приложение.

nohup ничего не отправляет никому. Ваше приложение, с другой стороны, принимает это stdin допустимый, открытый дескриптор файла. Это должно проверять код возврата любого примитива, который это использует, чтобы получить данные из стандартного входа и реагировать соответственно, если входной поток, как находят, закрывается или недопустимый.

Так как Вы говорите cin, Я собираюсь предположить, что Вы кодируете в C++. Это - безопасный способ получить строки от std::cin

void get_input()
{
    std::cout << "getting input" << std::endl;

    std::string input;
    while (std::cin >> input) {
        // Good, got something from cin
        std::cout << " * " << input << std::endl;
    }

    std::cout << "out of input loop" << std::endl;
    std::cout << std::cin.eof() << std::endl;
    std::cout << std::cin.bad() << std::endl;
}

Это - плохой способ получить ввод данных пользователем:

void bad_input()
{
    std::cout << "getting input" << std::endl;

    std::string input;
    while (!std::cin.bad()) {
        std::cin >> input;  // BAD: not checking if the extractor succeeded
        std::cout << input << std::endl;
        // do stuff
    }

    // Not reached if `std::cin` reaches EOF
    std::cout << "out of input loop" << std::endl;
}

Начиная с потока в eof не bad(), это циклично выполнится навсегда однажды cin достигает OEF. Существует много изменений для этого (и хорошие и плохие версии), и подобные проблемы могут возникнуть в плоскости C (и много других языков) по подобным причинам.

2
19.08.2017, 22:12
1 ответ

При перемещении файла в той же файловой системе это отсоединяет файл от его исходного местоположения и присоединяет его к новому местоположению. Данные файла неизменны, и метаданные файла — inode — также неизменен. Таким образом, файл сохраняет свое владение, полномочия, времена и любой другой атрибут: только его имя и содержащий изменения каталога (и также inode изменяют время (ctime)).

Когда Вы копируете файл (с rsync или любая другая утилита), это создает новый файл с тем же содержанием, принадлежа Вам, с его набором времени изменения на дату, копия была закончена. В зависимости от утилиты копии это может дополнительно скопировать некоторые метаданные файла из оригинала, например, пользователя владения с rsync -o.

Перемещение inode только требует разрешения записи на исходном каталоге (для отсоединения его) и на целевом каталоге (для повторного прикрепления его). Это не требует, чтобы Вы владели файлом или даже могли считать или записать это. С другой стороны, Вы не можете создать файл, принадлежащий другому пользователю, или отдать файл другому пользователю (за исключением программ, работающих как корень). Так копирование файла как некорневой не может сохранить владение (если пользователь, делающий копию, не владел исходным файлом).

1
27.01.2020, 22:23

Теги

Похожие вопросы