利用我的假期来调整一些指示:)
以下代码对我自己而言是一项智力挑战。它可以帮助我处理指针等等。
我失败了。
我没有强制执行与错误管理的一致性,我承认。
Debian64。
我使用mmap,然后使用双指针赋值。这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
static int mmap_create(const char ** restrict map, const char * restrict path, const unsigned int * restrict size)
{
int fd;
int result;
fd = open(path, O_RDWR | O_CREAT,(mode_t)0777);
if (fd == -1)
{
printf("fail3\n");
close(fd);
return -1;
}
result = lseek(fd, *size-1, SEEK_SET);
if (result == -1)
{
printf("fail4\n");
close(fd);
return -1;
}
result = write(fd, "", 1);
if (result != 1)
{
printf("fail0\n");
close(fd);
return -1;
}
/* Here is my problem since map is a pointer to pointer */
map = mmap(0, *size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (map == MAP_FAILED)
{
printf("fail\n");
close(fd);
return -1;
}
printf("pointing to %p\n",map);
return 0;
}
static void second_function(const char * restrict path, const char ** restrict handle)
{
printf("pointing to %p\n",handle);
/* CREATE MMAP */
unsigned int value = 100;
mmap_create(handle,path,&value);
}
static void write_to(char ** map)
{
printf("pointing to %p\n",map);
}
int main(int argc, char * argv[])
{
const char path[] = "/my/path/";
char ** handle_a;
printf("pointing to %p\n",handle_a);
second_function(path,handle_a);
printf("pointing to %p\n",handle_a);
write_to(handle_a);
/*munmap*/
return 0;
}
如何能够检索映射文件的正确地址直到write_to函数?
前两个是零(正常),第三个被分配,但最后两个是零。不好。
我认为mmap调用都出错了,因为它给出了一个指针,但我有一个指向指针的指针。 此后,地址不再相同。 然后,我迷路了......
请问任何“指针”?
由于
答案 0 :(得分:0)
handle_a没有分配内存来存储指针
变化
char ** handle_a;
到
char * handle_a;
然后用作
second_function(path,&handle_a);
并将其指定为;
*map = mmap(0, *size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);