2015-09-10 1 views
0

Я изучаю Linux-программирование, и у меня есть вопрос о mmap.Есть ли какое-либо решение, чтобы отличить чтение или запись в Ubuntu mmap?

Я хотел бы посмотреть более подробно на процесс, используя strace. я сделал с ним, и я увидел системный вызов под названием mmap. Но я не мог видеть ни одного флага или другого понятия, была ли карта памяти для чтения, для записи.

Есть ли способ отличить чтение или запись в mmap?

Я использую Ubuntu 14.04.

благодаря искренне

+0

Strace не показывает вам что-то вроде 'mmap (NULL, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1,0)'? Только для чтения вы увидите 'mmap' с' PROT_READ' –

ответ

2

В Ubuntu 15.04, если я побежал

strace -f echo "QQQ" 

я получить выход

mmap(0x7f28bc458000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c0000) = 0x7f28bc458000 
mmap(0x7f28bc45e000, 16128, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f28bc45e000 
... 
mmap(NULL, 2919792, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f28bbdcf000 

PROT_READ - страницы могут быть считаны

PROT_WRITE - страницы могут

http://man7.org/linux/man-pages/man2/mmap.2.html

+0

, но речь идет о защите. не так ли? – youngsun

+0

@ user3293627 Это именно то, что вы хотите, я считаю. Сопоставление выполняется на основе каждой страницы, и каждая страница помечена как прочитанная, прочитанная-запись или другие флаги. Вы записываете в эту память, используя адресный массив байтов, но его страница отмечена как PROT_WRITE, это будет нормально –

+0

, и я хотел бы знать. mmaped память будет записана на диск. этот случай также отличается тем, что прот? это потому что. в настоящее время множество программ используют mmap вместо написания syscall. все, что я хочу знать, это то, что mmap в strace - о файле wrtie. извините, я был расплывчатым. Является ли это возможным ? еще раз спасибо – youngsun

Смежные вопросы