#c #mmap
#c #mmap
Вопрос:
Если у меня есть файл, с которым я сопоставил mmap
вот так
sfd = open("test.txt", O_RDONLY); filesize = lseek(sfd, 0, 10); src = mmap(NULL, filesize, PROT_READ, MAP_PRIVATE, sfd, 0);
так что прямо сейчас sizeof
отображение равно 0 байтам, потому что размер test.txt равно 0. Ну и что, что я хочу написать слово hello
в отображенную область. Как это сделать?
Я пытался вот так
memcpy(src,"hello", sizeof("hello"));
Но это приводит к ошибке шины. Я мог бы использовать mremap
, но это недоступно в моей системе. Поэтому мне нравится знать, как писать в отображенную область что-то с memcpy
Обновить
Это мой код, и теперь он дает мне segFault в memcpy
строке
int main(int argc, char **argv){ int sfd, dfd; char *src, *dest; size_t filesize=10; /* SOURCE */ sfd = open("test.txt", O_RDWR); src = mmap(NULL, filesize, PROT_READ, MAP_PRIVATE, sfd, 0); ftruncate(sfd,10); if(src== MAP_FAILED) {printf("errorn");exit(0);} /* DESTINATION */ memcpy(src,"hello", sizeof("hello")); munmap(src, filesize); close(sfd); close(dfd); return 0; }
Комментарии:
1. Я бы предположил
PROT_READ
, что и писать в память не очень хорошо.2. Каков результат
src== MAP_FAILED
3. Как насчет установки размера файла на определенное значение? Например, с
ftruncate
. Конечно, это означает, что вы должны открыть файл с включенной записью (напримерO_RDWR
).4. @Someprogrammerdude спасибо за комментарий. Теперь он дает мне Segfault в memcpy
5. Ну, у тебя все еще есть только
PROT_READ
. Память недоступна для записи.