Linux filesystem
От: Разраб  
Дата: 31.01.24 04:13
Оценка:
await File.WriteAllBytesAsync(path, bytes);

Может подобный код завершиться раньше, чем файл path станет на чтение|запись?
ОС astralinux x64
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Linux filesystem
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.01.24 07:01
Оценка:
Здравствуйте, Разраб, Вы писали:
Р>Может подобный код завершиться раньше, чем файл path станет на чтение|запись?
Р>ОС astralinux x64
Что значит "станет"?
Этот код может завершитьcя массой способов.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Linux filesystem
От: Разраб  
Дата: 31.01.24 07:05
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Разраб, Вы писали:

Р>>Может подобный код завершиться раньше, чем файл path станет на чтение|запись?
Р>>ОС astralinux x64
S>Что значит "станет"?
S>Этот код может завершитьcя массой способов.
ошибки нет. следом вызывается утилита cryptcp которая читает созданный файл, но почему-то не может прочитать(в него пишется серт).
Возможно, крипто-про, что-то еще не может прочитать, но быть может, есть инфа именно по File.Write<..>, вот...
я например знаю. что в линухе можно файл открытый удалить, и все равно он будет доступен пока не будет освобожден дескриптор.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Linux filesystem
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.01.24 07:14
Оценка: 10 (1)
Здравствуйте, Разраб, Вы писали:
Р>ошибки нет. следом вызывается утилита cryptcp которая читает созданный файл, но почему-то не может прочитать(в него пишется серт).
А, вы имели в виду "будет ли закрыт handle к моменту возврата из await"?
Судя по https://github.com/dotnet/runtime/blob/cd460dbda99c080b9f9ec1cbdcd233f25ba8c189/src/libraries/System.Private.CoreLib/src/System/IO/File.cs#L1068C7-L1083C1
и https://github.com/dotnet/runtime/blob/cd460dbda99c080b9f9ec1cbdcd233f25ba8c189/src/libraries/System.Private.CoreLib/src/Microsoft/Win32/SafeHandles/SafeFileHandle.Unix.cs#L144C12-L153C14 — будет.

Р>Возможно, крипто-про, что-то еще не может прочитать, но быть может, есть инфа именно по File.Write<..>, вот...

Р>я например знаю. что в линухе можно файл открытый удалить, и все равно он будет доступен пока не будет освобожден дескриптор.
Эмм, это вроде deleteonclosе, и он как раз доступен только в винде. Но метод File.WriteAllBytesAsync не использует этот флаг.
В общем, надо посмотреть, кто удерживает хэндл открытым. Я не шибко знаком с инструментами в линуксе, но наверняка такие средства есть.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Linux filesystem
От: GarryIV  
Дата: 31.01.24 07:16
Оценка: 9 (2)
Здравствуйте, Разраб, Вы писали:

Р>
Р>await File.WriteAllBytesAsync(path, bytes);
Р>

Р>Может подобный код завершиться раньше, чем файл path станет на чтение|запись?

С сетевыми ФС возможны приколы если писать на одной а читать на другой, пол файла можно увидеть легко. С локальными операциями сюрпризов не встречал.
WBR, Igor Evgrafov
Re: Linux filesystem
От: Pzz Россия https://github.com/alexpevzner
Дата: 31.01.24 17:22
Оценка: 14 (3)
Здравствуйте, Разраб, Вы писали:

Р>Может подобный код завершиться раньше, чем файл path станет на чтение|запись?

Р>ОС astralinux x64

Насколько я помню, в линухе fd от дискового файла всегда готов читать/писать, если спрашивать poll-ом. А асинхронная запись в него делается совсем другим муханизьмом.

И у них даже семантика другая. Простой советский write() в дисковый файл скажет тебе, что все ОК, как только данные скопируются в кеш. Асинхронная запись завершится, когда данные дойдут до самого диска, и он скажет, что принял их.
Re[3]: Linux filesystem
От: Pzz Россия https://github.com/alexpevzner
Дата: 31.01.24 17:24
Оценка: 5 (1) +1
Здравствуйте, Разраб, Вы писали:

Р>Возможно, крипто-про, что-то еще не может прочитать, но быть может, есть инфа именно по File.Write<..>, вот...

Р>я например знаю. что в линухе можно файл открытый удалить, и все равно он будет доступен пока не будет освобожден дескриптор.

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