mmap関数を機能させることができません。 EINVALエラーコードが返されます。mmap()はEINVALを返します
void* mapped =
mmap((void*)(map_addr + slide),
map_size,
PROT_WRITE | PROT_READ,
MAP_PRIVATE | MAP_ANON,
bprm->file,
map_offset);
私は私のプラットフォーム(ダーウィン)に、この機能のためにドキュメントをチェックしましたし、何か問題があるようには思えません。 mmapのマニュアルページには、EINVALが返される4つのケースがあります。
[EINVAL] MAP_FIXED was specified and the addr argument was not page
aligned, or part of the desired address space resides out of the
valid address space for a user process.
MAP_FIXEDが指定されていないので、これはこれではありません。
[EINVAL] flags does not include either MAP_PRIVATE or MAP_SHARED.
MAP_PRIVATEが存在します。
[EINVAL] The len argument was negative.
呼び出し時のLEN(map_size)の引数は、引数offset(map_offset)が0ので、それはページが整列しなければならないである8192
[EINVAL] The offset argument was not page-aligned based on the page size as
returned by getpagesize(3).
です。 (おそらく私は間違っていますか?)
MAP_ANONでは、一部の実装ではfdを-1にする必要があります。チェックする価値があります。 –
** @ Simon Elliott **はい、そうです。ありがとうございました。 –