LINUX.ORG.RU

как загнать файл в память?


0

0

есть у меня файл из 10 байт, который я дергаю 10 раз в секунду по самбе с виндовой машины сишной прогой. Диск таким макаром довольно скоро посыпется, если такая частота обращений, возможно ли сделать так, чтобы загнать файл в память и писать(читать, блокировать на запись, чтение и т.п.) в него как в обычный файл? Чтобы диск не испортить? Если он на диске, то на celeron1300 выходит, что самба жрет 20% процессорного времени. Юзаю асплинукс7.3

если я сделаю fifo, то можно ли его блокировать flock LOCK_EX, LOCK_IN и если я сделаю через 10 раз в секунду обращение к fifo то будет ли дергаться винт. Как я понял обращение к fifo происходит.

??

спасибо за ответ!

☆☆

как я понял обращение к fifo происходит как к pipe? Т.е. оно его все гонит в ядро? Т.е. лучше уж на диск писать что-ли получается? Вобщем короче такая вот проблема...

vilfred ☆☆
() автор топика

Попробуй на линуксе создать какую-нибудь директорию на romfs (документация в исходниках ядра) и экспортируй ее через самбу.
PS А почему сокеты нельзя использовать?
PPS А FIFO через самбу будут работать? Есть большие сомнения (почему нельзя device special file на удаленный комп экспортировать. FIFO это тоже special file)
geekkoo

anonymous
()

geekkoo - на сервере уже есть один сокет, с которого данные валятся, это конешно не значит что их не может быть два, но как работать через сокеты под винду и linux - я просто не знаю. Клиент-сервера не смогу написать... вот фишка вся в чем... потому и с файлом этим заморочался...

vilfred ☆☆
() автор топика

Пользуй tcl (кроссплатформенный) или что-нибудь типа его (нафик с сями заморачиваться)
Команда socket.
В общем случае (если бы вся программа на tcle была бы написана) потребуется менять только одну строчку - открывать socket/file (если клиент на линуксе)

geekkoo

anonymous
()

Если я не ошибаюсь, самба всё же какое-то кэширование делает, так что этот метод вообще не имеет права на существование. Судя по всему, надо руки выпрямлять, и синхронизироваться не по содержимому файла.

Antichrist
()
Ответ на: комментарий от vilfred

Даже на сях никаких проблем писать с winsock, оно отличается от нормального юниксового подхода только инициализацией.

Antichrist
()

2vilfred :
Сразу оговорюсь, с самбой я не знаком. Но, комментарии:

> ...который я дергаю 10 раз в секунду..
> Диск таким макаром довольно скоро посыпется, если такая частота обращений...
10 раз в секунду - НЕ высокая частота. А диски и не на такое рассчитаны.


> загнать файл в память и писать(читать, блокировать на запись, чтение и т.п.) в него
> как в обычный файл?
Вообще-то, система буферизует обращения к диску, так что
быстрые чтение/запись в маленький файл ВООБЩЕ не приводят в физическому обращению к диску.
Другое дело, самба может каждый раз принудительно выталкивать буфера.
А, может, ты сам это делаешь (какой-нибудь sync опшен при монтировании)?

Попробуй сделать RAM диск:
mkdir /tmp/ramdisk0
mke2fs /dev/ram0
mount /dev/ram0 /tmp/ramdisk0

И на /tmp/ramdisk0 у тебя диск, целиком сидящий в памяти.

>как я понял обращение к fifo происходит как к pipe? Т.е. оно его все гонит в ядро?
Правильно понял.

> Т.е. лучше уж на диск писать что-ли получается?
Нет. На диск чтение/эапись тоже через ядро идет.

> Клиент-сервера не смогу написать...
Попробуй - чесслово, не велика наука (для такого простого случая, что тебе
нужен).

anonymous
()

!!!!!!!!!!!!!!!!!!!!!!!!!!! smotri v mane funkcii mmap i msync

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.