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中,由于子进程的文件描述符是拷贝服进程的文件描述符,所以指向的文件表是一样的,无论在哪里修改了文件的属性,其子进程或者是父进程都会受到影响的。
阅读(895) | 评论(0) | 转发(0) |