fork函数是创建一个新的进程作为原进程的子进程,创建的子进程和父进程存在很多的相似性,首先父子进程的虚拟存储空间的用户空间是相同的,是将父进程的拷贝给子进程。同时父子进程对文件的操作是共享方式。因为父进程的文件描述符表被拷贝给了子进程(具体的原理参虚拟存储器的内容,私有对象写时拷贝实现了父子进程之间形成相互独立的地址空间)。因此父进程打开的所有文件描述符都在子进程中保存了(每个进程都有独立的描述符表)。由于所有的进程共享文件表、v-node表,所以父子进程的描述符表也是相同的,所以父子进程对文件是以共享的方式存在的。
#include
#include
#include
#include
#include
#include
#include
int main()
{
int fd;
char c[3];
/*打开文件foobar.txt,采用的是只读形式*/
fd = open("foobar.txt",O_RDONLY,0);
if(fork()==0)//子进程
{
read(fd,&c,2);/*读文件的一个字节到c中*/
c[2]='