Когда я перенаправлю вывод команды в файл (например, echo Hello > file), будет ли этот файл иметь такие данные сразу после выхода из команды? Или все еще есть очень маленькое окно между выходами команды и данными, записанными в файл? Я хотел бы прочитать файл сразу после выхода из команды, но я не хочу читать пустой файл.
С точки зрения данного примера, что такое «процесс»? Разве echo и> не являются отдельными (недолговечными) процессами? И где вывод echo остается до выполнения> ?
Если пользователь закрывает программу, предположим, что его не волнует потеря данных.
@ oɔɯǝɹ > - перенаправление оболочки. Это так же, как если бы программа открыла именованный файл для записи и заменила на него стандартный вывод, что в точности и делает оболочка.
Я думаю, что ОС несет ответственность за предоставление вам файла, содержащего Hello, независимо от того, сброшен он или нет.
@Eric Ваш пример команды является частью некоторого сценария оболочки и команды чтения несколько позже в том же сценарии оболочки? А какую оболочку вы используете?
Если программа работает на компьютере A, и вы читаете файл на компьютере B, а файловая система компьютера A подключена по сети, то вы можете в конечном итоге прочитать пустой файл, в зависимости от типа сетевой файловой системы и настроек монтирования. Поэтому вы можете отключить кэширование для этого монтирования.
К сведению, некоторые программы, такие как echo, cat и dd, не используют внутреннее кэширование записи в процессе, поэтому их выходные данные немедленно отображаются в выходном файле.
Я немного боюсь, во что это превратилось. :-)
Я думаю, что этот вопрос нуждается в уточнении: файл хранится в общей сетевой папке (например, NFS, Samba) или на локальной машине? Процесс, участвующий в чтении файла, находится на том же компьютере или другом компьютере в сети, чем тот, который создает файл? Ответы, представленные до сих пор, предполагают, что один и тот же компьютер, но возможны разные машины в сети. Когда задействованы сетевые машины, все становится намного сложнее (например, частичные файлы, проблемы с сетью, кэширование).
Вероятно, он выполняет команду сразу, но время, необходимое для фактического открытия файла, записи и закрытия, будет зависеть от скорости и типа вашего жесткого диска, любых запущенных программ и т. Д.