Перейти к содержимому
  • 0
hohserg

Недетерминизм filesystem.exists

Вопрос

Если взять произвольный hdd, записать на нем файл, допустим, /test.txt, то filesystem.exists("/test.txt") после включения компа выдает разные значения(true,false), кажется, случайным образом, при этом файл не подвергается изменениям.

При этом за одну сессию включенного компа он выдает одинаковые значения

Минимальный тестовый пример(запускать несколько раз):

init.lua

setmetatable(component,{__index=function(_,key) return component.proxy(component.list(key)()) end}) --тут стоит сделать буферизацию, но на тест не влияет по идее

local gpu,filesystem=component.gpu,component.filesystem

for i=0,24 do
	gpu.set(50,i,tostring(filesystem.exists("/test.txt")))
end

Аналогично работает filesystem.list("/"): иногда верный список файлов, иногда пустой список

 

Это баг или я что-то делаю не так?

Изменено пользователем hohserg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

8 часов назад, hohserg сказал:

filesystem.getLabel() позволяет отличить

При условии, если кто-то не указал носителю метку "tmpfs". К слову, ничто не мешает это сделать.

 

5 часов назад, hohserg сказал:

Это только для OpenOS, вроде

Действительно, только для OpenOS. Заглянув в недра системы, я пришёл к такому решению:

local tmpfs = component.proxy(computer.tmpAddress())

Так должно работать гарантированно верно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, hohserg сказал:

Есть ли какой-то способ отличить tmpfs от filesystem жесткого диска?

~~~

filesystem.getLabel() позволяет отличить

Ещё способ:

filesystem.fsnode.name

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кажись, нашел причину: недетерминирован component.list(), в разное время он возвращает компоненты в разной последовательности

image.png.7c37477a1688662eee723f190bb2e220.png 

image.png.5da2a2bc5ac1f6e8c9afbb4a943c211e.png

 

Однако откуда может взяться больше одной fs при такой сборке?

image.png.ebda37c83bb4136a15c242f4dc30cc32.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть ли какой-то способ отличить tmpfs от filesystem жесткого диска?

~~~

filesystem.getLabel() позволяет отличить

Изменено пользователем hohserg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это только для OpenOS, вроде

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...