Sau đây là mã mà tôi đang sử dụng để định dạng tệp trong ubuntu với ôm, nhưng cuộc gọi này không thành công với lỗi "đối số không hợp lệ". Tuy nhiên, khi tôi vượt qua cờ MAP_ANON không có tham số mô tả tệp trong mmap, thì nó hoạt động. Tôi không thể hiểu được lý do có thể có đằng sau điều này.Ubuntu 10.04, lỗi khi sử dụng MAP_HUGETLB với MAP_SHARED
Thứ hai, tôi không thể hiểu tại sao tệp mmaping được phép với MAP_PRIVATE khi cờ này chính nó có nghĩa là không có thay đổi nào được ghi lại vào tệp. Điều này luôn luôn có thể được thực hiện bằng cách sử dụng MAP_ANON, hoặc là có một cái gì đó tôi đang mất tích?
Ai đó có thể giúp tôi với những thứ này không?
int32_t main(int32_t argc, char** argv) {
int32_t map_length = 16*1024*1024; // 16 MB , huge page size is 2 MB
int32_t protection = PROT_READ | PROT_WRITE;
int32_t flags = MAP_SHARED | MAP_HUGETLB;
int32_t file__ = open("test",O_RDWR|O_CREAT | O_LARGEFILE,s_IRWXU | S_IRGRP | S_IROTH);
if(file__ < 0) {
std::cerr << "Unable to open file\n";
return -1;
}
if (ftruncate(file__, map_length) < 0) {
std::cerr
<< "main :: unable to truncate the file\n"
<< "main :: " << strerror(errno) << "\n"
<< "main :: error number is " << errno << "\n";
return -1;
}
void *addr= mmap(NULL, map_length, protection, flags, file__, 0);
if (addr == MAP_FAILED) {
perror("mmap");
return -1;
}
const char* msg = "Hello World\n";
int32_t len = strlen(msg);
memcpy(addr,msg,len);
munmap(addr, map_length);
close(file__);
return 0;
}
'int32_t main' là lỗi. Theo tiêu chuẩn C++, kiểu trả về của 'main' và kiểu' argc' phải là 'int'. –
larsmans, điều đó có ảnh hưởng đến đầu ra của chương trình không? Trên int kiến trúc của tôi là giống như int32_t, vì vậy nó không quan trọng cả. Nhưng từ quan điểm tiêu chuẩn của xem nó là không đúng, mà tôi đồng ý. (Trước đó tôi đã thực hiện một số sai sót trong văn bản bình luận này) – Faraz
Faraz: Không, anh ta chỉ là nitpicking. – BjoernD