копирование с помощью memcpy некоторых данных в mmap возвращает адрес указателя местоположения файла

#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 . Память недоступна для записи.