gpt4 book ai didi

ios - iOS 上的 mmap 有时会返回 0xffffffff

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:55 25 4
gpt4 key购买 nike

我尝试使用以下代码在 iOS 设备上使用 mmap

struct stat s;
int status;
size_t size;
int fd;

fd = open ([dataFile cStringUsingEncoding:NSUTF8StringEncoding], O_RDONLY);
fcntl( fd, F_NOCACHE );
status = fstat (fd, & s);
if (status < 0)
{
// error handling
}
size = s.st_size;
FuncFileLog(@"%@", @"before read");
off_t offset = 0;
char* data = (char *) mmap(NULL, size, PROT_READ, MAP_SHARED, fd, offset);

char *pch;
int lastPosInString = 0;

pch=strchr(data,'\n');

long lineCounter = 0;

while (pch != NULL)
{
size_t lineLength = 0;

int posInString = pch - data + 1;
lineLength = posInString - lastPosInString;

char *out = calloc(lineLength, sizeof(char));

memcpy(out, data + lastPosInString, lineLength);
out[lineLength - 1] = '\0';

if (lineCounter > 0)
{
// do something
}

lastPosInString = posInString;
pch=strchr(pch+1,'\n');

lineCounter = lineCounter + 1;
}

munmap((void *)data, size);
close(fd);

它可以工作,但有时当我读取一个大约 3.5 MB 的文件时,我会无缘无故地收到一个 EXC_BAD_ACCESS,因为我的 mmap 数据指针是 0xffffffff,我认为这是一个错误。而且它似乎只发生在模拟器中。

我明白了errno:12 无法分配内存目前仅在模拟器中保护 malloc、保护边缘、涂鸦和僵尸

最佳答案

我建议阅读 mmap 的手册页(打开 Terminal.app 并键入 man mmap)

RETURN VALUES
Upon successful completion, mmap() returns a pointer to the mapped region.
Otherwise, a value of MAP_FAILED is returned and errno is set to indicate
the error.

还有一个部分描述了可能被设置的errno

关于ios - iOS 上的 mmap 有时会返回 0xffffffff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15645825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com