linux 内存映射参数问题

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//文件仓库
//行大小

int main()
{
FILE * pf = fopen("./qwer.gah","r+");
void * pm = mmap(NULL,20,PROT_WRITE,MAP_PRIVATE,fileno(pf),8);
if(pm == (void * )-1)
perror("mmap");
return 0;
}
上面的代码中,mmap最后一个参数时文件的偏移量,这个值使用的时候只要不是0就会返回-1,errno是对应invalid arguement

http://www.cnblogs.com/yuuyuu/p/5137345.html

void* mmap ( void * addr , size_t len , int prot , int flags , int fd , off_t offset ) 参数fd为即将映射到进程空间的文件描述字,一般由open()返回,同时,fd可以指定为-1,此时须指定flags参数中的MAP_ANON,表明进行的是匿名映射(不涉及具体的文件名,避免了文件的创建及打开,很显然只能用于具有亲缘关系的进程间通信)。len是映射到调用进程地址空间的字节数,它从被映射文件开头offset个字节开始算起。prot 参数指定共享内存的访问权限。可取如下几个值的或:PROT_READ(可读) , PROT_WRITE (可写), PROT_EXEC (可执行), PROT_NONE(不可访问)。flags由以下几个常值指定:MAP_SHARED , MAP_PRIVATE , MAP_FIXED,其中,MAP_SHARED , MAP_PRIVATE必选其一,而MAP_FIXED则不推荐使用。offset参数一般设为0,表示从文件头开始映射。参数addr指定文件应被映射到进程空间的起始地址,一般被指定一个空指针,此时选择起始地址的任务留给内核来完成。函数的返回值为最后文件映射到进程空间的地址,进程可直接操作起始地址为该值的有效地址。