Как скопировать файл при создании, не уничтожая его в Unix / Linux - PullRequest
1 голос
/ 20 сентября 2010

У меня есть файл в процессе создания.Насколько я понимаю, копирование этого файла в другой файл убило бы процесс создания.Есть ли где-нибудь, чтобы преодолеть эту проблему?

Ответы [ 3 ]

6 голосов
/ 20 сентября 2010

Нет, чтение из файла, в который в данный момент выполняется запись, не нарушит этот процесс записи.Однако копия, которую вы берете, будет неполной, поскольку очевидно, что вы не можете скопировать части, которые еще не были написаны.Последующие записи будут получать только первый файл, а не копия, поэтому, если вы хотите получить весь файл, дождитесь завершения записи.

1 голос
/ 09 мая 2012

В зависимости от того, какой именно должна быть семантика вашей операции, ссылки могут быть тем, что вам нужно. Проверьте поведение символических и жестких ссылок. Один из двух может быть именно тем, что вы хотите.

1 голос
/ 20 сентября 2010

Если второй процесс не использует дескриптор файла, связанный с тем же описанием открытого файла, что и процесс, создающий файл, проблем не будет.Если дескриптор файла имеет одно и то же описание открытого файла, тогда процесс чтения переместит позицию файла (как и процесс записи), что приведет к путанице.Однако для этого требуется, чтобы у процессов был общий предок, открывший файл (например, копир разветвляется создателем).Я думаю, что это вряд ли имеет место из вашего описания.

Ваш процесс копирования может выполняться как tail -f и считывать до первого EOF, затем приостанавливать и читать снова, когда доступно больше данных, повторяя, пока не будет сказано, чтобы остановить, или это может определить, что файл завершен.Если он не может определить, когда файл завершен, вам придется уничтожить его (прервать или еще хуже).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...