以下是我用于创建memory mapped file
的代码:
fid = open(filename, O_CREAT | O_RDWR, 0660);
if ( 0 > fid )
{
throw error;
}
/* mapped offset pointer to data file */
offset_table_p = (ubyte_2 *) shmat(fid, 0, SHM_MAP);
/* Initialize table */
memset(offset_table_p, 0x00, (table_size + 1) * 2);
说table_size大约是2XXXXXXXX字节。
在调试期间,我注意到在尝试初始化'偏移表指针'时失败了,
任何人都可以向我提供一些关于它为什么在提升过程中失败的意见? 有没有可能我的内存映射文件没有创建所需的表大小?
答案 0 :(得分:2)
据我阅读文档可以看出,你完全错了。
使用open()和mmap()或使用shmget()和shmat()。
如果你使用open(),你需要先让文件足够长。使用ftruncate()。
答案 1 :(得分:0)
首先要做的事情:
在open()调用之前和之后检查文件。如果在Linux上,您可以使用代码:
char paxbuff[1000]; // at start of function
sprintf (paxbuff,"ls -al %s",filename);
system (paxbuff);
fid = open(filename, O_CREAT | O_RDWR, 0660); // this line already exists.
system (paxbuff);
然后,在调用shmat()之后,检查返回值和大小:
offset_table_p = (ubyte_2 *) shmat(fid, 0, SHM_MAP); // already exists.
printf ("ret = %p, errno = %d\n",offset_table_p,errno);
printf ("sz = %d\n",table_size);
这应该足以解决问题。