gpt4 book ai didi

c - c中的mmap errno 22读取openmp数据类型描述

转载 作者:行者123 更新时间:2023-11-30 16:05:46 28 4
gpt4 key购买 nike

我正在使用 mmap 来读取文件。
mmap 返回 errno 22,参数无效。
本例中的 stat.st_size 是 400,我认为它不是“太大”。
我认为我没有遇到“我们不喜欢地址、长度或偏移量”。
我在 Intel Xeon E5 上运行这个程序(我认为它不相关)。
我在这里缺少什么?

if( argc > 1 ) {
struct stat stat;

for( int i = 1; i < argc; i++ ) {
if( access(argv[i], R_OK) == -1 ) {
printf("\n Cannot access datatype description file %s\n", argv[i]);
continue;
}
int fd = open(argv[i], O_RDONLY);
if( fd == -1 ) {
printf("\n Cannot open datatype description from file %s\n", argv[i]);
continue;
}
if( fstat(fd, &stat) == -1 ) {
printf("\n Cannot stat the %s file\n", argv[i]);
continue;
}

void* addr = mmap(NULL, stat.st_size, PROT_READ, MAP_FILE, fd, 0);

if( MAP_FAILED == addr ) {
printf("\nCannot map the datatype description file %s\n", argv[i]);
printf("%s %d stat.st_size %d\n", strerror(errno), errno, stat.st_size );
perror("mmap");
close(fd);
continue;
}

munmap(addr, stat.st_size);
free(addr);
close(fd);
}
}

最佳答案

来自man 2 mmap:

       MAP_FILE
Compatibility flag. Ignored.
...
EINVAL flags contained neither MAP_PRIVATE or MAP_SHARED, or contained
both of these values.

您需要传递MAP_PRIVATEMAP_SHARED之一,并且应该停止传递MAP_FILE。 (你认为它做了什么?)

关于c - c中的mmap errno 22读取openmp数据类型描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60200780/

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