Я использую 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);
}
}