0
Я просто изучаю использование msync, однако я столкнулся с проблемой segmentation fault
. Когда я меняю MAPSTEP
на небольшое число, ошибка исчезла. Что случилось с этим кодом?ошибка сегментации во время вызова MSN
#define MAPSTEP 1 * 4096
main(void) {
size_t bytesWritten =0;
int fd;
const char text[MAPSTEP];
memset(text, '-', sizeof(char) * MAPSTEP);
fd = open("/tmp/mmsyncTest", (O_CREAT | O_TRUNC | O_RDWR),
(S_IRWXU | S_IRWXG | S_IRWXO));
if (fd < 0) {
perror("open() error");
return fd;
}
off_t lastoffset = lseek(fd, MAPSTEP, SEEK_SET);
bytesWritten = write(fd, " ", 1);
if (bytesWritten != 1) {
perror("write error. ");
return -1;
}
/* mmap the file. */
void *address;
int len;
off_t my_offset = 0;
len = MAPSTEP; /* Map page */
address = mmap(NULL, len, PROT_WRITE, MAP_SHARED, fd, my_offset);
if (address == MAP_FAILED) {
perror("mmap error. ");
return -1;
}
/* Move some data into the file using memory map. */
(void) strcpy((char*) address, text);
/* use msync to write changes to disk. */
if (msync(address, MAPSTEP , MS_SYNC) < 0) {
perror("msync failed with error:");
return -1;
}
else (void) printf("%s","msync completed successfully.\n");
close(fd);
unlink("/tmp/msyncTest");
}