[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
On Wed, Dec 06, 2000 at 09:26:08AM +0530, Ramesh.S wrote:
> here in the above code after fork a seperate copy of the saem memory
> is inherited from the parent process. therefore every process will
> have its own resource copy. to be more clear...
A lot of answers become clear if you understand the meaning of a "file".
In UNIX, there are three distinct concepts:
1. file descriptor
2. file table
3. body of the file
(1) is just a opaque handle. It's meaning is process specific.
(2) is normally not shared. But will be shared if you create a new process
using clone and CLONE_FD false.
(3) is globally shared. This is enforced by a data structure called the
vnode cache. Whether you do mmap/write or whatever operation to
read/write the file, at any point in time, the operating system returns
the same answer to everyone who asks the question "what is the value
of byte 2034 in file foo".
Note that sharing could be prevented using various flags at open(2) time
or mmap(2) time. Of course, you can serialize access to files using
file locking APIs.