Hi everyone!
I found that if you want to write to the memory got by mmap(), you have
to get the file descriptor for mmap() in O_RDWR mode. If you got the
file descriptor in O_WRONLY mode, then writing to the memory got by
mmap() will lead to segmentation fault. Anyone knows why? Is this a rule
or a bug?
What if I just want to write to the file and nothing else?
Please, look at my tiny program, I wrote this to test mmap(), it is cute.
#include <stdio.h>
typedef struct{
char name[4];
int age;
} people;
int main(int argc, char** argv) {
int fd, i;
people *p_map;
char temp;
fd = open(argv[1], O_RDWR|O_TRUNC); //this works fine
//fd = open(argv[1], O_WRONLY|O_TRUNC); this will cause segmentation fault
if (fd == -1) {
perror("open()");
}
lseek(fd, sizeof(people)*5-1, SEEK_SET);
write(fd, " " , 1);
p_map = (people *)mmap(NULL,sizeof(people)*5,PROT_WRITE,MAP_SHARED ,fd,0);
close(fd);
memset(p_map, '\0', sizeof(people)*5);
temp = 'b';
for(i=0; i<5; i++) {
temp++;
//(p_map+i)->name = "aaa";
//memcpy((p_map+i)->name, &temp, 2);
memset((p_map+i)->name, temp, 3);
(p_map+i)->age = 20+i;
}
printf("initialize over\n");
for(i=0; i<5; i++) {
printf("%s\t%d\n", (p_map+i)->name, (p_map+i)->age);
}
sleep(10);
munmap(p_map, sizeof(people)*5);
printf( "umap ok\n" );
return 0;
} 1 1342
On Tue, 2004-08-24 at 09:54 +0800, Hao Xu wrote: Hi everyone!
I found that if you want to write to the memory got by mmap(), you have to get the file descriptor for mmap() in O_RDWR mode. If you got the file descriptor in O_WRONLY mode, then writing to the memory got by mmap() will lead to segmentation fault. Anyone knows why? Is this a rule or a bug?
That is not implemented in glibc. The mmap call is implemented in your
O/S kernel. You'll probably get a better reply if you post to the group
concerning that kernel, since this group deals with plain C (mmap is not
a part of C, it's a part of POSIX to begin with).
Fredrik Tolf This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Parzival |
last post by:
I have a program which works well on under Windows, which
I am trying to get to work under Linux (Mandrake 9.1)
It accesses a binary file with mmap. Under Windows,
the file maps and reads withut...
|
by: Claudio Grondi |
last post by:
Background information:
---------------------------------
in order to monitor mainboard sensory data
as fan speeds, temperatures, applications
like SpeedFan http://www.almico.com/speedfan.php
or...
|
by: Nick |
last post by:
excuse me!!
may i ask a simple problem here?
if i dynamically allocate a memory(ex. new in C++ or malloc in C)
in a sub-function and forget free the space end of the sub-function.
does it...
|
by: Hao Xu |
last post by:
Hi everyone!
I found that if you want to write to the memory got by mmap(), you have
to get the file descriptor for mmap() in O_RDWR mode. If you got the
file descriptor in O_WRONLY mode, then...
|
by: beejisbrigit |
last post by:
Hi there,
I was wondering if anyone had experience with File I/O in Java vs. C++
using mmap(),
and knew if the performance was better in one that the other, or more
or less negligible.
My...
|
by: koara |
last post by:
Hello all,
i am using the mmap module (python2.4) to access contents of a file.
My question regards the relative performance of mmap.seek() vs
mmap.tell(). I have a generator that returns...
|
by: Neal Becker |
last post by:
On linux, I don't understand why:
f = open ('/dev/eos', 'rw')
m = mmap.mmap(f.fileno(), 1000000, prot=mmap.PROT_READ|mmap.PROT_WRITE,
flags=mmap.MAP_SHARED)
gives 'permission denied', but...
|
by: Kris Kennaway |
last post by:
If I do the following:
def mmap_search(f, string):
fh = file(f)
mm = mmap.mmap(fh.fileno(), 0, mmap.MAP_SHARED, mmap.PROT_READ)
return mm.find(string)
def mmap_is_in(f, string):
fh =...
|
by: Gabriel Genellina |
last post by:
En Thu, 29 May 2008 19:17:05 -0300, Kris Kennaway <kris@FreeBSD.org>
escribió:
Looks like you should define the sq_contains member in mmap_as_sequence,
and the type should have the...
|
by: Charles Arthur |
last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
|
by: emmanuelkatto |
last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud.
Please let me know.
Thanks!
Emmanuel
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new...
| |