Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5706472
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类: C/C++

2006-11-16 18:31:22

1、
#include
#include
#include

int main()
{
    int fd1,fd2;
    char c;

    fd1 = open("baz.txt",O_RDONLY,0);
    fd2 = open("baz.txt",O_RDONLY,0);

    read(fd1,&c,1);
    printf("c: %c\n",c);
    read(fd2,&c,1);
    printf("c: %c\n",c);

    return 0;
}

运行结果:
wangyao@fisherman:~/Desktop/temp/io$ ./io1
c: a
c: a

2、
#include
#include
#include

int main()
{
    int fd;
    char c;

    fd = open("baz.txt",O_RDONLY,0);
    if(fork() == 0)
    {
        read(fd,&c,1);
        return 1;
    }
    wait(NULL);
    read(fd,&c,1);
    printf("c: %c\n",c);

    return 0;
}

运行结果:
wangyao@fisherman:~/Desktop/temp/io$ ./io2
c: b

在例1中由于文件描述符是两个不同的,两个都有自己独立的文件表,所以不会相互影响。
但是在例2中,由于子进程的文件描述符是拷贝服进程的文件描述符,所以指向的文件表是一样的,无论在哪里修改了文件的属性,其子进程或者是父进程都会受到影响的。
阅读(842) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~