LINUX.ORG.RU

Использование write()


0

0

Можно ли (и как?) спользовать write() для записи в разделяемую память?
Просто хотелось бы чтоб ф-ция могла писать и в файл и в память...
anonymous

>Можно ли (и как?) спользовать write() для записи в разделяемую память?

>Просто хотелось бы чтоб ф-ция могла писать и в файл и в память...

если память - posix то никаких проблем (man shm_open), если sysV - то ССЗБ. здесь я ничем не помогу

cvv ★★★★★
()
Ответ на: комментарий от anonymous

>Правильно ли я понял, что можно так:
>aaa = shm_open("/path/mem", ...);
>write(aaa, ...);

да оно самое.

cvv ★★★★★
()
Ответ на: комментарий от anonymous

>Я имел ввиду mmap.

и что с ним можно дальше сделать?

cvv ★★★★★
()
Ответ на: комментарий от cvv

> если память - posix то никаких проблем (man shm_open), если sysV - то ССЗБ. здесь я ничем не помогу

Причем тут shm_open? После выполнения shm_open() ты получишь
файл-дескритор, который все равно нужно отобразить в память
при помощи mmap(). Нет никакой принципиальной разницы между
отображением объекта, полученного при помощи shm_open()
и файла, открытого простым open().

Так что я бы посоветовал OP использовать обычный memory-mapped file.
Никакого принципиального преимущества от использования shm_open()
он не получит, а геморрой с переносимостью возможен.

Кроме того, если возможен одновременный доступ к одному
объекту через mmap и read/write следует почитатать также man msync

HTH

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

насколько я понял парень будет осуществлять доступ к шареной памяти только посредством write() следственно зачем ему всякие mmap и иже с ним я не понимаю.

>Так что я бы посоветовал OP использовать обычный memory-mapped file. Никакого принципиального преимущества от использования shm_open() он не получит, а геморрой с переносимостью возможен.

ну если он проектирует систему с нуля то вы правы. я исходил из того что остальная часть системы уже написана.

cvv ★★★★★
()
Ответ на: комментарий от cvv

> ну если он проектирует систему с нуля то вы правы. я исходил
> из того что остальная часть системы уже написана.
>

Ну если так - то конечно, однако ему все равно надо выяснить,
что использует исходная система для организации shared memory -
shm_open/mmap или open/mmap. А бы даже сказал, что более вероятен
вариант именно open/mmap - как более устоявшийся и переносимый.


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

> Кроме того, если возможен одновременный доступ к одному
> объекту через mmap и read/write следует почитатать также man msync

msync() не нужен, все будет когерентно и без него.
разве что в каком-то старом и экзотичном Unix'e
это не так.

msync(), в сущности, это "перенос" флага _PAGE_BIT_DIRTY
(выставляется процессором) в PAGECACHE_TAG_DIRTY.

те, после этого вызова ядро будет знать, какие страницы
были модифицированы процессом. иначе это осталось бы
неизвестным до munmap() или до тех пор, пока за этой
страничкой не пришел swapper.

(ну да, MS_SYNC вызовет синхронную запись).

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