Предположим, что вход находится в input.txt, и Вы хотите вывод в output.txt. Сделайте сценарий Python и назовите его sort.py как это:
l=map(int,raw_input("").strip().split()) l.sort() print l # It will store it as a list # or more precisely your answer can be k="" for i in l: k+=str(i)+" " print k #same output as you want
Выполните его в терминале:
python sort.py < input.txt > output.txt
Если вы перемещаете внутри одной и той же файловой системы, mv
является атомарным -- это просто переименование, а не копирование содержимого. Так что если на последнем шаге вашего поколения:
mv myfile.new myfile.last
Процессы чтения всегда будут видеть либо старую, либо новую версию файла, никогда ничего неполного.
Вы можете упростить ваше первое предложенное решение:
восстановить файл в myfile.new
, затем переименовать (mv
) его в myfile
.
Если вы перезаписывали myfile
с новыми данными, то асинхронный читатель
могут получить поврежденные (или, по крайней мере, неполные) данные - но вы это уже знаете.
Я уверен, что любое из предложенных вами решений будет безопасным.
Если другой процесс откроет версию файла в 12:34 в 12:38,
тогда он будет продолжать иметь этот файл открытым для чтения.
после того, как вы переименовали версию файла 12:39 в my file
,
несмотря на то, что он больше не появляется ни в одном каталоге.
Во втором случае это еще более понятно,
где версия 12:34 остается в каталоге.
после изменения символической ссылки на указатель на файл 12:39.